반응형
이벤트 체인 구성한 뒤 Log를 통해 이벤트에 리스너들이 등록이 된 걸 GetInvocationList 메서드로 확인한 후 실제 이벤트를 발생시켰는데 리스너가 하나도 없는 걸로 인식이 될 때
이건 뭔 이상한 버그인가 라고 생각이 들었는데 알고보니
계층구조 내에 두 군데 게임오브젝트에 동일한 해당 스크립트 컴포넌트가 부착되어 있었는데, 하나는 사용을 하지 않을 예정이어서 게임오브젝트를 비활성화를 해놨는데, 게임오브젝트가 비활성화 되어있음에도 불구하고, 두 스크립트가 모두 실행이 되어서 실제 사용하는 스크립트에서는 이벤트 초기화가 정상적으로 되었음에도 불구하고, 비활성화 되어있던 게임오브젝트에 있는 스크립트가 OnEnable 메서드가 호출이 되지 않아서 초기화가 되지 않은 상태에서 이 엉뚱한 이벤트가 트리거가 되면서 이벤트에 리스너가 하나도 없는 걸로 인식이 되었다.
조금 더 테스트를 해보니, 기존 싱글톤 패턴으로 사용했을 때에는 게임오브젝트가 비활성화 되어있으면 내부의 스크립트가 당연히(?) 실행이 되지 않아서 이런현상이 생기지 않았는데, DI 플러그인 Zenject 를 사용하면 이런현상이 발생한다.
결론은 Zenject 버그인걸로 판단이 된다.
선택은 둘 중 하나다. Zenject를 사용하지 않든지 아니면 이런 현상을 알고 사용하든지 Signal Bus를 사용하면 괜찮지 않을수도 있겠다는 생각은 들기도 하지만, 수정하기 전 기존 소스코드(이벤트쪽)는 여전히 문제가 생기니 확인이 필요하다.
일단 지금 당장은 사용하지 않는 스크립트는 모조리 삭제를 해야겠다.
반응형
반응형
'Unity' 카테고리의 다른 글
UnityEvent와 Action Delegate 의 차이 (1) | 2024.03.27 |
---|---|
젠젝트(Zenject)를 사용한 후 콘솔창에 버그가 생긴 듯 (0) | 2024.03.25 |
유니티 Color() 변화가 없을 때 (1) | 2024.03.20 |
ZenjectException: Unable to resolve 'HPManager' while building object with type 'DataManager'. Object graph:DataManager (0) | 2024.03.20 |
유니티 부모 오브젝트, 자식 오브젝트 레이어 셋팅과 Rigidbody 2D 유뮤에 따른 상호작용 (2) | 2024.03.14 |