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와는 달리 정확한 순간에 호출되는 특성이 있어, 종료 전에 필요한 마무리 작업을 할 때 유용하다.
'게임 개발 일지 > 내일배움캠프 TIL' 카테고리의 다른 글
[C#] Update 주의사항 / Time.deltaTime 사용법 (0) | 2024.02.20 |
---|---|
[Unity] 렌더링 파이프라인 (0) | 2024.02.20 |
[Unity] Unity 생명주기 (0) | 2024.02.15 |
[Unity] MVC 모델 (0) | 2024.02.14 |
[C#] 싱글톤의 장단점 (1) | 2024.02.13 |
댓글