유니티에서 스크립트를 생성하면, Monobehavior을 기본적으로 상속받고 있다.

이러한 Monobehavior 클래스는 어떤 역할을 하는 것일까?

 

📝 Monobehavior                                                                                                         

유니티 공식 docs에서는 아래와 같이 설명하고 있다.

MonoBehaviour 클래스는 대규모 이벤트 메시지 컬렉션에 대한 액세스를 제공하며, 이를 통해 현재 프로젝트에서 발생하는 상황에 따라 코드를 실행할 수 있습니다.

 

🔖 Monobehavior의 역할

 

1. 모든 유니티 스크립트가 파생되는 기본 클래스

 

2. 에디터와 스크립트 파일을 연결시켜주는 역할

클래스를 에디터에서 읽고, 컴포넌트로 추가하는 등의 동작을 하기 위해서는 유니티 에디터가 클래스에 대한 정보를 알아야 한다. 이때 Monobehavior이 그 역할을 해준다.

 

3. 시작 및 업데이트 등과 같은 대한 연결을 제공 

Start(), Update(), OnEnable() 등의 콜백 함수를 의미한다.

 

4. 이러한 이벤트 함수들의 생명주기 관리

 

🔖 Monobehavior의 특징

1. 게임오브젝트의 Component로 등록해야 사용가능

반대로, Monobehavior을 상속받지 않는 클래스는 게임오브젝트의 컴포넌트로 등록할 수 없다.

 

2. Monobehavior을 상속받은 클래스를 사용하기 위해서는 GetComponent로 클래스를 가져와야 함

 

3. new로 동적 생성이 불가능 

 

🔖 콜백 함수(생명주기 메서드)는 어떻게 호출되는 것인가?

유니티에는 Messaging System이라는 시스템이 있는데 특정 시점에 유저가 정의한 함수가 동작할 수 있게 해 준다.

Monobehavior 스크립트가 처음으로 이용될 때, 스크립트 내 이러한 함수들이 있다면

이 스크립트는 각 함수와 관련된 List에 저장된다. 

예를 들어서 어떤 스크립트에 Update 함수가 정의되어 있다면 이 스크립트는 Update와 관련된 List에 저장되고,

이 List는 매 프레임마다 Update가 호출되어야 할 시점에 사용된다.

 

사용하지 않는 " 자주 호출되는 메서드(특히 Update, FixedUpdate, LateUpdate) 관련된 함수들은 사용하지 않으면 지우는 것이 성능에 좋다"라는 이야기를 들어보았을 것이다.

이것은 Monobehavior가 이용될 때 해당 메서드를 사용하던 안 하던 실행하기 때문이다.

 

자세한 내용은 공식문서를 참고하자! 

https://unity.com/kr/blog/engine-platform/10000-update-calls

 

10000번의 Update() 호출

void Update() { transform.Translate(0, 0, Time.deltaTime); }하지만 숙련된 개발자는 위의 코드에서 몇몇 의문이 들 수 있습니다. 이 함수는 도대체 언제 호출되지? 만약, 여러개의 스크립트가 있고 그 스크립

unity.com

 

 

내부적으로는 IL2CPP와 같은 Unity의 스크립팅 백엔드에서 MonoBehaviour가 어떻게 처리되는지 알 수 있다.

 

🔖 Monobehavior이 콜백함수를 실행하는 순서, 생명주기

Awake() → OnEnable() → Start() → Update() → LateUpdate() → OnDisable() → OnDestroy() 등의 순서로 호출된다.

자세한 내용은 유니티 생명주기 공식문서를 참고하자

 


유니티 라이프사이클

https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html

 

이벤트 함수의 실행 순서 - Unity 매뉴얼

Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.

docs.unity3d.com

 

 

유니티 중요 클래스 - Monobehavior

https://docs.unity3d.com/kr/2020.3/Manual/class-MonoBehaviour.html

 

중요 클래스 - MonoBehaviour - Unity 매뉴얼

MonoBehaviour 클래스는 기본적으로 모든 Unity 스크립트가 파생되는 기본 클래스입니다. Unity의 프로젝트 창에서 C# 스크립트를 생성하면 MonoBehaviour에서 자동으로 상속되며, 템플릿 스크립트를 제공

docs.unity3d.com

 

 

+ Recent posts