728x90
유니티에서 C# 코드로 UI 프리팹을 instantiate 하여 SetParent를 하면 의도치 않은 결과를 볼 수 있다.
위는 그리드 레이아웃으로 정렬이 된 오브젝트에 새로운 이미지를 추가했을 때 레이아웃을 무시하고 배치된 경우다.
이 문제가 왜 일어나는지 알기 위해선 SetParent에 worldPositionStays라는 매개변수에 대해 이해할 필요가 있다.
유니티 공식 docs에는 이 매개변수에 대해 다음과 같이 설명하고 있다.
If true, the parent-relative position, scale and rotation are modified such that the object keeps the same world space position, rotation and scale as before.
worldPositionStays가 true이면 오브젝트의 글로벌 좌표, 스케일, 로테이션을 유지할 수 있게 해 준다. 그러면 로컬 좌표, 스케일, 로테이션이 바뀐다는 뜻이다.
참고로 유니티에선 프리팹을 instantiate 하면 좌표가 (0, 0, 0)으로 설정된다.
즉, 위 상황에 대입하면 추가된 오브젝트가 레이아웃에 맞추는 것을 거부하고 혼자 가운데에 짱 박히는 것으로 이해할 수 있다.
따라서 SetParent에 worldPositionStays를 false로 주어 부모를 따라갈 수 있게 해주자.
새로 초기화한 이미지가 잘 배치되는 것을 확인할 수 있다.
728x90
'Unity Engine' 카테고리의 다른 글
유니티 Terrain Sample Asset Pack 셰이더 오류 해결 (1) | 2022.10.10 |
---|---|
유니티 vscode 자동완성 안 되는 경우 intellisense 해결 (0) | 2022.06.29 |
유니티 엔진 JsonUtility 다루기 - JSON 읽기 (0) | 2022.04.22 |
유니티 Shaderlab CGPROGRAM VS CGINCLUDE (0) | 2022.03.14 |
[유니티 엔진] WaitForSeconds vs WaitForSecondsRealtime (0) | 2022.01.19 |