본문 바로가기

Unity Engine

유니티 UI 프리팹을 부모와 맞추기

728x90
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
728x90