포스트

[Unity] 2D UI에서 Transform의 SetParent 함수에서 Scale 값이 바뀌는 현상

이슈

공방에 입장 시 스킬의 카테고리 오브젝트 자식으로 오브젝트를 Instantiate으로 생성하는 작업 중 생성될 때 프리펩 오브젝트의 Scale 값이 멋대로 바뀌어 게임에서 제대로 보이지 않았다.

1
2
3
4
5
6
foreach(var skill in skills)
{
    GameObject skillElement = Instantiate(skillPrefab);
    skillElement.transform.SetParent(skillCategory[(int)skill.category].transform); 
    skillElement.GetComponent<SkillElement>().SetSkill(skill);
}

image
image
보시다시피 프리펩의 Scale은 (1,1,1)이었는데 지 멋대로 바뀌어서 인게임에서 목록들이 보이지 않는다.

해결

프리펩의 Scale값이 이상한것을 토대로 구글에 검색해본 결과 다음의 블로그를 통해 문제를 해결할 수 있었다.
블로그
image
transform의 SetParent 함수의 두번째 매개변수인 worldPositionStays을 false로 지정안해줘서 그런 것이었다.
Instantite에서 오브젝트를 제대로 생성했는데 worldPositionStays을 true(생략)로 하면 새로운 부모를 지정해줄때 로컬 위치, 회전, 크기를 부모 오브젝트와 일치하도록 조정하다가 개발자의 의도와 맞지 않게 수정이 되니까 수정없이 부모를 변경하고 싶을때 매개변수를 false로 지정해주는 것을 잊지말자
image

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.