해결된 질문
작성
·
360
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 함수를 호출하는데,
SetInfo 함수를 호출했을 때, 생성된 UI_ConfirmPopup의 Start 함수는 호출이 된 상태일까요?
아니면 객체만 생성되고 Start 함수는 호출되지 않았지만 SetInfo 함수를 호출할 수 있는 상태인 건가요?
디버깅 모드를 보면 Start 함수는 호출이 안됐는데 SetInfo 로 초기화가 되고 있는 것 같습니다.
일반적으로 Object.Instantiate() 와 같은 함수로 객체를 생성하면 생성하자마자 Start 함수가 호출되고 함수 내에 초기화된 프로퍼티를 쓸 수 있는지가 알고 싶습니다.
그 이유는 혼자 게임을 만들다 보면, 위와 비슷하게 어떤 객체 내부에서 자식객체를 생성하고 초기화 해줄 때가 있는데, Start 함수가 호출되어서 프로퍼티가 전부 초기화된 줄 알고 접근하면 null 에러가 뜰 때가 있어서 질문드립니다.
답변 1
0
아뇨 Awake만 호출된 상태입니다.
맞습니다. 이런 경우 Awake에 넣거나, 객체에 bool _init 값을 두고 그것으로 초기화 안되었으면
알아서 초기화하게 넣어주면 편안해집니다.
감사합니다. 이해했어요.