테스트 환경
Unity 5.3.8p2
Android
uGUI에서 ScrollView 안의 UI가 정상적으로 출력되지 않는 이슈가 발생하였다.
실행 환경에 따라 발생 하기도 발생하지 않기도 해 문제를 파악하는데 예상외로 시간이 걸렸다.
ScrollView의 초기화 코드는 다음과 같이 작성 되었다.
private void Awake()
{
BuildItems();
}
private void BuildItems()
{
RectTransform content = scrollView.content;
for (int i = 0; i < _emoticonTabs.Length; i++)
{
GameObject instance = Instantiate(_tabPrefab) as GameObject;
instance.transform.SetParent(content);
instance.transform.localScale = Vector3.one;
}
}
해결 방법은 3가지로 찾을 수 있었다.
1. 초기화 시점을 Awake가 아닌 Start로 옮긴다
2. SetParent 부분에 false 인자를 추가한다.
3. local 값들(localPosition, localRtation)을 초기화 하는 코드를 추가한다.
처음에 Null 에러 등으로 Instance가 생성 되지 않는 것으로 의심 했었으나 로그를 확인한 결과 아니었다.
그 다음 포지션 값을 의심 해 Anchored Position 값을 찍어 봤으나 별 이상이 없었다.
그렇다면 Viewport나 Content의 크기가 잘못 잡혀있는가 싶었는데 이도 정상이었다.
하나씩 따져가며 디버깅 하고 구글링 하는 도중 SetParent에 false 인자를 추가하라는 글과 Instance 생성 타이밍을 Start로 바꿔보라는 2가지 글이 눈에 들어와 테스트 해보았는데 성공하였다.
추가적으로 SetParent에 false 인자를 추가해서 해결되는 이슈라면 local 값 초기화로도 수정되지 않았을까 싶어 해봤는데 역시 성공하였다.
Position 값은 LayoutGroup에 의해 자동으로 초기화 되는 것이 맞는 케이스 라고 생각 되어지나 정상동작하지 않는 경우가 있다는게 확인 되었고, transform 변경시 초기화는 무조건 넣는게 좋다라는 결론을 내리게 됬다.
'Works > Unity 3D' 카테고리의 다른 글
[Unity3D] Shader Find 실패 (0) | 2019.03.06 |
---|---|
[Unity3D] Bitmap Font 생성 및 사용 (0) | 2019.03.04 |
[Unity3D] uGUI TEXT 에서 자간 조정 (0) | 2019.02.21 |
[Unity3D] Device hardware is not supported (0) | 2019.02.20 |
Custom Inspector GUI - PropertyDrawer (1) | 2015.11.20 |
댓글