인프런 커뮤니티 질문&답변

astrape님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

Scene Manager #1

아래 질문 답변을 읽어보았는데 그래도 잘 이해가 안되서 질문드립니다

작성

·

344

2

<BaseScene>

<GameScene>

<LoginScene>

질문 1. Awake() 함수를 이용하면 오브젝트가 비활성화 되어 있더라도 안에 있는 코드가 실행된다고 하셨는데 @Scene 오브젝트를 비활성화 하니 코드가 실행되지 않는것 같은데 제가 이해를 잘못한건지 궁금합니다.

(활성화)

(비활성화)

질문2.  GameScene에서 프로젝트에 배치를 해놓았지만 Awake()나 Start() 함수가 없는데도 해당 코드가 실행이 되는 이유가 GameScene을 컴파일 할때 BaseScene을 상속받으면서 BaseScene 안에 있는 Awake() 때문에 GameScene의 override Init() 함수가 동작하는건가요?

질문3.  TestScene을 하나더 만들어서 BaseScene을 상속받고 override Init()을 하였는데 유니티의 컴포넌트에 추가시에 TestScene을 먼저 넣고 GameScene을 나중에 추가하여도 디버깅을 해보면 GameScene안에 있는 Init()가 먼저 호출되고 그이후에 TestScene에 있는 Init()가 호출되는데 이 순서는 랜덤으로 되는건가요? 아니면 순서가 정해져있을까요?

<TestScene>

<Scene Object>

질문이 많은것 같아 죄송합니다 ㅠㅠ 항상 답변 감사드립니다!

답변 3

3

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1.
Awake는 Start와 다르게 Component가 만들어지는 시점에서 호출됩니다.
[오브젝트가 비활성화 되도 실행된다]는 것이
GameObject가 아니라 [해당 Component가 비활성화 되어도] 실행된다 것을 의미했는데
설명에 혼동을 드려 죄송합니다.

2.
맞습니다.
물론 GameScene에서 Awake, Start를 추가해서 Init 코드를 직접 호출해도 됩니다.

3.
Scene에 다수의 GameObject를 배치할 경우
그 GameObject들의 Start, Update 등의 함수 순서는 유니티가 정해주니
사실상 누가 먼저 실행될지 모른다고 가정을 해야 합니다.
정말로 호출 순서가 중요할 때를 대비해서
Awake, Start, Update, LateUpdate 등등
다양한 시점의 함수를 제공하니 활용하면 됩니다.
(LateUpdate는 무조건 Update보다 늦게 호출됨)

0

2번 정말로 했갈렸는데,
제가 이해한 바를 덧붙이자면,
GameScene은 부모 클래스 BaseScene을 상속받았으니
BaseScene의 모든 메소드와 프로퍼티들을 상속받은 것입니다.
즉 Awake() 함수도 함께 상속받은 것이죠. 따라서 GameScene 에 Awake()를 따로 (명시적으로) 만들어 주지 않았더라도 부모 함수 BaseScene에서 상속받은 Awake()를 이미 들고 있는 것입니다.
그렇기 때문에 GameScene만 유니티에서 실행시켜도 BaseScene의 Init()이 호출되는 것입니다.

0

astrape님의 프로필 이미지
astrape
질문자

아하!! 항상 친절한 답변 감사드립니다!

astrape님의 프로필 이미지

작성한 질문수

질문하기