오늘 배운 내용
- awke(), start() 그리고 오브젝트의 생성 순서와 동작순서의 연관성
awake(), start() 그리고 서로 다른오브젝트 들의 동작순서
git에서 main branch를 pull 받아서 프로젝트를 열면 UiEffectManager가 작동을 하지 않았는데
UIEffectManager의 오브젝트를 한번 지웠다가 다시 생성하면 UiEffectManager의 기능이 잘 작동했다.
왜 이런 현상이 생기는지 도저히 이해가 되지 않아서 튜터님이 오셨을때 질문을 드렸다.
튜터님이 우리 프로젝트를 깃을 통해서 공유 받으신 후 확인해 주셨는데
GameManager와 UIEffectManager의 생성 순서와 awake()와 start()의 동작 순서 때문에 발생하게 된 문제였다.
문제 되었던 부분
GameManager는 Start()에서 게임에 필요한 요소들을 초기화 하고 있었는데
이때 CardShuffle()을 통해서 UIEffectManager를 호출했다.
그런데 UiEffectManager에서는 Start() 부분에서 List를 Clear()하고 있었고
이 부분에서 문제가 발생했다.
UiEffectManager -> GameManager 순서대로 오브젝트가 생성 됬을때와
GameManager -> UiEffectManager 순서대로 오브젝트가 생성 됬을때의 실행 순서가 달라져서
UiEffectManager 오브젝트를 지웠다가 다시 생성하면 제대로 작동하는 것 이였다.
문제를 해결하면서 알게 된점은 여러 오브젝트들을 관리할때 awake(), start()의 작동 순서가
오브젝트들의 생성 순서에 따라서 달라질 수 있고,
여러 오브젝트들을 다룰때 오브젝트들의 순서들을 유의해서 코드를 작성해야 한다는 것을 깨닫게 되었다.
결국 우리 프로젝트에서는 UIEffectManager의 list를 비울 필요가 없었기 때문에 그냥 그 내용을 빼서 해결할 수 있었고,
튜터님이 나중에 이 문제에 대해서 한번 교육을 해주신다고 하셨다.