• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

함수호출 순서관련해서 질문있습니다.

23.07.14 02:33 작성 조회수 275

0

[실전 게임 코드 리뷰] 개미회사 소스를 보면서 함수호출 관련해서 궁금점이 생겼습니다.

public class UI_TitlePopup : UI_Popup
{
//생략
	void OnClickStartButton()
	{

		Managers.UI.ShowPopupUI<UI_ConfirmPopup>().SetInfo(() =>
		{
			Managers.Game.Init();
			Managers.Game.SaveGame();
			Managers.UI.ClosePopupUI(this); // UI_TitlePopup
			Managers.UI.ShowPopupUI<UI_NamePopup>();
		}, Managers.GetText(Define.DataResetConfirm));
	}
//생략
}

 

위 코드에서

 

Managers.UI.ShowPopupUI<UI_ConfirmPopup>().SetInfo(() 

 

이 부분에서 Managers.UI.ShowPopupUI 이 코드는 팝업을 인스턴스화 시켜서 그 인스턴스의 .SetInfo 함수를 호출하는데,

 

  1. SetInfo 함수를 호출했을 때, 생성된 UI_ConfirmPopup의 Start 함수는 호출이 된 상태일까요?

  2. 아니면 객체만 생성되고 Start 함수는 호출되지 않았지만 SetInfo 함수를 호출할 수 있는 상태인 건가요?

 

디버깅 모드를 보면 Start 함수는 호출이 안됐는데 SetInfo 로 초기화가 되고 있는 것 같습니다.

 

 

 

일반적으로 Object.Instantiate() 와 같은 함수로 객체를 생성하면 생성하자마자 Start 함수가 호출되고 함수 내에 초기화된 프로퍼티를 쓸 수 있는지가 알고 싶습니다.

 

그 이유는 혼자 게임을 만들다 보면, 위와 비슷하게 어떤 객체 내부에서 자식객체를 생성하고 초기화 해줄 때가 있는데, Start 함수가 호출되어서 프로퍼티가 전부 초기화된 줄 알고 접근하면 null 에러가 뜰 때가 있어서 질문드립니다.

 

 

 

답변 1

답변을 작성해보세요.

0

  1. 아뇨 Awake만 호출된 상태입니다.

  2. 맞습니다. 이런 경우 Awake에 넣거나, 객체에 bool _init 값을 두고 그것으로 초기화 안되었으면
    알아서 초기화하게 넣어주면 편안해집니다.

감사합니다. 이해했어요.