유니티 내장 Pool을 쓰면서 재사용 시 초기화 순서가 많이 헷갈려 원하는대로 컨트롤이 힘들었다.
로그를 찍어가면서 확인한 결과 알게된 것을 정리해본다.
[최초 생성 시] ObjectPool.Get() ➡ Awake() ➡ OnEnable() ➡ ActionOnGet() ➡ Start()
[재활용 시] ObjectPool.Get() ➡ ActionOnGet() 안에서 gameObject.SetActive(true)하면 즉시 ➡ OnEnable()
유니티에서 setActive(true) 호출하면 OnEnable()이 호출되는 것을 알고있어야한다.
최초생성시에는 Get()과 동시에 생성되면서 gameObject의 awake -> OnEnable 사이클을 타지만,
재활용 시에는 ActionOnGet 먼저 호출되고 그 안에서 SetActive() 호출 시 -> OnEnable()이 호출되는 흐름을 타게된다. 최초생성시와는 다르게 이미 생성된 오브젝트를 재사용하는거라 Start()는 호출되지 않는다.
물론 이 순서도 ActionOn--() 안에서 SetActive()을 쓰지 않으면 바뀐다.
대개 ObjectPool.Get() 이후에 transform pos나 rotation 값을 넣어주는데 이 부분은 사이클의 맨 마지막에 들어오기 때문에 ActionOnGet(), OnEnable()에서 아무리 바꿔도 소용이 없는 것이다.
아래 코드를 보자.
Pool.Get() 에서 연달아 호출되는 메서드에서 position을 정해도 다음 줄에서 Vector3.zero로 바뀌는 모습이다.
주의해서 사용하자
#unity
'프로그래밍 > 유니티 (unity)' 카테고리의 다른 글
포토샵 여러이미지 동시에 자르기(애니메이션) (0) | 2022.09.28 |
---|---|
유니티) Easy save3. Reference could not be found in reference manager 에러뜰때 (0) | 2022.09.28 |
유니티 안열릴때(무반응) (0) | 2022.09.20 |
유니티) 파티클 검은색 표현이 안될때 (0) | 2022.09.19 |
유니티) 파티클 편집창에서 주황색 outline 없애기 (0) | 2022.09.19 |