안 쓰던 블로그

GridLayoutGroup에 소속된 오브젝트의 position 가져오기 본문

유니티/개발

GridLayoutGroup에 소속된 오브젝트의 position 가져오기

proqk 2021. 8. 1. 13:16
반응형

 

LayoutGroup을 적용한 부모 오브젝트 아래로, Text Prefab를 Instantiate로 생성해서 자식 오브젝트로 넣는 방식으로 정렬시켰다

이 상황에서 자식으로 생성된 Clone들의 Position을 가져오고 싶은 상태 (위 사진에서 Pos X와 Pos Y)

 

일반적으로 사용하는 RectTransform의 anchoredPosition으로 가져오는 방법과, 게임 오브젝트라면 transform.position으로 가져오는 방법을 사용할 수 있다

obj.transform.position.x;

 

 

근데 이렇게 하면 (0, 0, 0)만 출력된다

 

생성하면서 position을 저장해서 그런가 해서, Clone들을 Find해서 게임 오브젝트 리스트에 담아서 출력하는 방법도 써 보고, GetComponentsInChildren으로 목록을 가져와서 출력해 보고, Tag도 붙여 봤지만 위치값은 계속 0,0,0.이었다

 

그런데 막상 Scene화면에서 Clone된 오브젝트를 클릭해서 보면 (75, -75) 식으로 잘 들어와있다

내가 생각하기에는 Clone되어 레이아웃 그룹에 들어간 이후의 위치가 아닌, Prefab상태의 기본 위치인 0,0,0이 출력되는 듯 했다

 

찾아보니까 위치 값은 다음 프레임까지 업데이트되지 않기 때문에 이런 문제가 생긴 것이며, 코루틴을 사용해서 다음 프레임을 기다린 다음에 위치를 얻을 수 있다고 한다

현재 프레임에서 각 요소가 바로 업데이트되지 않는 이유는, 많은 변경을 우연하게 처리할수 있도록 계산해야 하는 항목들을 저장해 두고 다음 프레임의 시작 부분에서 한 번에 업데이트하기 때문이라고 한다

 

...
//------------------------------------------------------------
            GameObject newText = Instantiate(probText) as GameObject; //정답 UI 레이아웃 그룹에 Prefab로 게임오브젝트 생성
            newText.transform.SetParent(answerAllBox_text.transform); //부모 세팅            

            StartCoroutine(CoWaitForPosition(i, newText)); //코루틴 시작
        }
    }

    IEnumerator CoWaitForPosition(int i, GameObject obj)
    {
        yield return new WaitForEndOfFrame();
        mixposition[i, 0] = obj.transform.position.x; //grid에 있는 오브젝트의 위치 찾기
        mixposition[i, 1] = obj.transform.position.y;
        Debug.Log(obj.transform.position);
    }

이런 식으로 해 주었더니 0,0,0값이 아닌 다른 값이 나왔다

 

그런데 이렇게 해도 내가 원했던 (75,-75,0) 같은 값이 아닌 다른 값이 나오긴 했는데.. 그 부분까진 잘 모르겠다

배율이 다른 경우에는 적절히 수정하라고 하길래 나같은 경우 적당히 변경해서 사용했다

 

 

참고)

https://stackoverflow.com/questions/47571288/how-to-get-childrens-world-position-in-a-gridlayoutgroup-in-unity

https://answers.unity.com/questions/1437041/how-to-get-childrens-world-position-in-a-gridlayou.html?childToView=1437433#answer-1437433 

https://stackoverflow.com/questions/31383770/get-position-of-object-in-grid-layout/31395123#31395123

반응형
Comments