• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Managers의 Start() 함수에 대해서 질문드립니다.

22.03.29 15:39 작성 조회수 192

0

아래 비슷한 질문을 먼저 읽어봤는데, 선생님의 답변 

Managers를 Component로 만들었는데,
Scene에 배치된 GameObject에 기생(?)하고 있어야
해당 Component의 Start, Update가 호출됩니다.

을 보고 어느정도 이해가 되었습니다. 그런데 씬에 배치된 @Scene에는 컴포넌트로 Managers스크립트가 아닌 GameScene 스크립트가 들어가 있습니다. 그래서 저는 GameScene 스크립트 파일 코드 중, Managers.UI.ShowSceneUI<UI_Inven>(); 이 부분에서 Managers의 인스턴스를 처음으로 생성하는것으로 이해하고 이 지점에서 브레이킹 포인트를 잡고디버깅을 해보았는데, 

이 구문이 실행되기 전에 이미 s_instance에 @Manager가 생성돼있었습니다. 즉 Managers의 start함수에서 init이 먼저 실행되었다는건데, 이때 매니저스는 어느 게임오브젝트에서도 기생하고 있지 않은데 언제 start함수가 실행되서 @Managers가 생성된 것인지 원리를 모르겠습니다..

 

답변 1

답변을 작성해보세요.

0

그렇다면 s_instance 를 채우는 부분에 breakpoint를 걸고 다시 실행해보시기 바랍니다.

Managers의 Init함수에 중단점을 잡고 다시 해보니 호출스택에서  BaseScene의 init이 실행될때 그 안에서 @EvntSystem을 Instantiate하는 Managers.Resource.Instantiate를 타고 들어와서 실행되는 것을 확인할 수 있었습니다. 감사합니다 !! 

 

그런데 선생님 또 하나만 질문을 드리자면 결국에 Managers의 Start는 실행되지 않는건가요..?

좀 기본적인 질문을 묻는것 같아 죄송하네요.. 아직 처음 강의를 보는거라 열심히 따라하면서 보고있지만, ui부분은 코드를 따라치기 벅차고 전체적인 실행흐름을 파악하려고 하면 의문이 가득 생기네요.. 아직 처음이라 그런것일까요? 

의문이 생길 때는 코드를 눈으로 이해하려고 하기 보단,
지속적으로 breakpoint를 걸고 멈춰보면서 확인하는게 좋습니다.
Managers의 Start도 로그를 찍어보면 물론 실행됩니다!
다만 타이밍이 우리가 원하는 타이밍보다 조금 늦게 실행될 수는 있으니
Managers.를 사용할 때 확인해서 아직 초기화 된 적이 없다면,
강제로 초기화를 해주고 있는 것이죠.