안 쓰던 블로그
GridLayoutGroup에 소속된 오브젝트의 position 가져오기 본문
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/31383770/get-position-of-object-in-grid-layout/31395123#31395123
'유니티 > 개발' 카테고리의 다른 글
[유니티] 에러 MissingReferenceException: The object of type 'RectTransform' has been destroyed but you are still trying to access it. (0) | 2021.08.03 |
---|---|
Button Prefab에 Onclick() 추가하기!!!! (1) | 2021.08.03 |
유니티 안드로이드 APK, AAB 빌드 방법 2021 ver (쉬운방법) (4) | 2021.07.03 |
유니티 SetActive(false) 되어있는 오브젝트 찾기 (0) | 2020.10.04 |
유니티 UI 클릭할 때 사이즈 확대, 축소, 중앙 이동(UI 오브젝트의 크기 변경, RectTransform) (0) | 2020.09.20 |