강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của xhtkwkd11223036
xhtkwkd11223036

câu hỏi đã được viết

[Đánh giá mã trò chơi thực tế] Trò chơi nhấp chuột Unity

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

Đã giải quyết

Viết

·

422

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 에러가 뜰 때가 있어서 질문드립니다.

 

 

 

unity

Câu trả lời 1

0

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

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

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

xhtkwkd11223036님의 프로필 이미지
xhtkwkd11223036
Người đặt câu hỏi

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

Hình ảnh hồ sơ của xhtkwkd11223036
xhtkwkd11223036

câu hỏi đã được viết

Đặt câu hỏi