본문 바로가기
게임 개발 일지/내일배움캠프 TIL

[Unity] MonoBehaviour 메서드

by 빛하_ 2024. 2. 16.

MonoBehaviour 클래스의 주요 메서드

 

MonoBehaviour 클래스는 기본적으로 모든 Unity 스크립트가 파생되는 기본 클래스이다.

Unity의 프로젝트 창에서 C# 스크립트를 생성하면 MonoBehaviour에 자동으로 상속된다.

MonoBehaviour의 역할은 게임 오브젝트와 스크립트의 연결, 이벤트를 발생시켜 게임 오브젝트를 컨트롤하는 것이다.

 


 

Reset : 

유니티 에디터에서 오브젝트 생성 후 인스펙터 뷰에서 리셋을 눌러줄 때 실행된다. 객체의 속성을 초기 값으로 설정해 줄 때 사용한다. 예를 들어, 스크립트가 어떤 변수들을 가지고 있고 이 변수들이 default 값을 가져야 하는 경우, Reset 메서드를 사용하여 이러한 변수들을 초기화할 수 있다.

 

Awake : 

스크립트의 모든 인스턴스에서 한 번만 호출되며, 스크립트가 활성화되기 전에 실행되기 때문에 다른 스크립트나 컴포넌트와의 초기 설정이나 의존성 등을 설정하는 데 유용하다.

모든 오브젝트가 초기화 된 후 호출되기 때문에 GameObject.Find 같은 명령문을 안전하게 사용할 수 있다.           

Awake 함수는 언제나 Start 함수 전에 호출되는 점에 주의. (StartCoroutine 을 사용할 수 없다.)

 

OnEnable : 

다른 초기화 함수와 달리 하나의 라이프 사이클 내에서 여러번 호출 될 수 있다.

인스펙터뷰에서 체크 및 스크립트 내에서 SetActive 함수로 게임 오브젝트를 활성화 할 때마다 호출 된다.

일반적으로 초기화 또는 설정 작업을 위해 사용한다. 예를 들어, 다른 컴포넌트와의 연결이나 자원 할당과 같은 작업들을 이 메서드에서 처리할 수 있다.

 

Start : 

Update 함수가 호출되기 전에 한번만 호출된다.

다른 스크립트의 모든 Awake가 모두 실행된 이후에 실행되며 Awake와 달리 오브젝트가 활성화 되어 있어야 호출 된다.

Awake 이후 호출되므로 예를들어 A 객체의 Awake 함수에서 동적 생성한 멤버를 B객체의 Awake 함수에서 접근할 경우 오브젝트 들의 Awake 함수 호출 순서는 임의로 정할 수 없으므로 B객체의 Awake 가 먼저 호출 되어 NullReferenceExecption 을 발생 시킬 수 있다.

이럴 경우 동적 생성은 Awake 에서 하고 동적 생성되는 멤버에 접근하는 초기화 코드는 항상 Awake 이후로 보장되는 Start 에 넣는 것이 좋다. 

 

FixedUpdate 

프레임과 상관없이 무조건 시간 기준(default 0.02초. 변경 가능)으로 호출 되는 Update 콜백이기 때문에 주로 물리 엔진을 사용하는 경우 일정 시간 간격으로 힘을 가하거나 체크할 때 사용한다.

프레임 속도가 기준 시간 속도보다 오래 걸릴 정도로 느려질 경우 한 프레임에서 여러번 호출 될 수 있다.

 

Update : 

매 프레임마다 호출되는 가장 일반적인 Update 함수.

오브젝트가 활성화 되어 있어야 호출 되며 프레임 단위이기에 호출 시간 간격은 프레임에 따라 변한다.

가장 자주 사용되는 메서드 중 하나이며 게임의 로직을 갱신하고 상태를 업데이트하는 데 사용한다.

Update 메서드는 주로 게임 오브젝트의 상태를 갱신하거나 플레이어 입력에 따른 동작을 처리하는 데 활용한다. 예를 들어, 플레이어의 입력을 감지하고, 오브젝트의 위치를 변경하거나 애니메이션을 업데이트하고, 상호작용이 필요한 게임 로직을 수행하는 데 사용한다.

 

LateUpdate : 

모든 Update 계열 콜백들이 실행되고 나서 호출된다. 다른 스크립트나 컴포넌트에서 수행한 변환 작업에 대응하는 데 사용한다. 

Update 함수에서 캐릭터를 이동 시킨 후 LastUpdate에서 캐릭터의 좌표를 추적해 카메라의 좌표를 이동시키는 등의 경우에 사용한다. 

LateUpdate를 사용하면 다른 스크립트에서 적용한 변환을 고려하여 로직을 구성할 수 있다.

예를 들어, 플레이어의 이동이나 회전에 대한 로직을 Update에서 처리하고, LateUpdate에서는 카메라를 플레이어 뒤로 따라가도록 조정하는 등의 작업을 할 수 있다.

 

OnDisable : 

게임 오브젝트 또는 스크립트가 비 활성화 되었을 때 호출된다. (StartCoroutine 사용 불가)

해당 GameObject가 비활성화되거나 스크립트가 제거되는 경우에 실행된다. 스크립트가 활성화되어 있는 동안 설정된 상태나 리소스를 정리하거나 해제하는 데 사용한다. 예를 들어, 다른 컴포넌트와의 연결을 해제하거나 리소스를 해제하는 작업들이 이 메서드에서 수행된다.

 

OnDestroy : 

해당 오브젝트가 파괴 되기 전 프레임의 Update 함수 실행 후 호출 된다.

일반적으로 라이프 사이클 내에서 사용한 자원들을 돌려 놓는 작업을 이곳에서 하게 된다.

스크립트 인스턴스가 파괴되기 전에 필요한 정리 작업을 수행하는 데 사용한다.

이는 리소스 해제, 이벤트 구독 해제 등과 같은 작업들을 포함할 수 있다.

 

OnApplicationQuit : 

앱이 종료 되기 직전에 모든 오브젝트에서 호출된다. 에디터에서는 플레이 모드를 중지할 때 호출된다.

주로 게임이 종료될 때 필요한 정리 작업이나 리소스 해제 등을 수행하는 데 사용한다.

OnApplicationQuit 메서드는 애플리케이션이 종료되기 전에 호출되므로, 종료 직전에 필요한 작업을 수행할 수 있다. 이 메서드는 Update나 LateUpdate와는 달리 정확한 순간에 호출되는 특성이 있어, 종료 전에 필요한 마무리 작업을 할 때 유용하다.

 

 

 

 

 

댓글