20240219_유니티 Monobehaviour

2024. 2. 21. 09:20IT/TIL

오늘의 TIL은 유니티에서 사용하는 Monobehaviour에 관한 내용이다.

 

Monobehaviour(Unity Documetation)

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

 

MonoBehaviour 클래스는 에디터에서 게임 오브젝트에 스크립트를 연결할 수 있는 프레임워크를 제공할 뿐만 아니라,

시작 및 업데이트 등과 같은 유용한 이벤트에 대한 연결을 제공합니다.

 

코루틴

MonoBehaviour 클래스를 사용하면 코루틴을 시작, 중지 및 관리할 수 있습니다.

이는 특정 시간 동안 기다리거나 특정 작업이 완료될 때까지 기다리면서

다른 코드가 계속 실행되도록 해주는 비동기 코드 작성 방식입니다.

 

이벤트

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

 

Start - 게임 오브젝트가 존재하기 시작될 때 호출됩니다(씬이 로드될 때 또는 게임 오브젝트가 인스턴스화 될 때 호출).

Update - 프레임마다 호출됩니다.

FixedUpdate - 물리 타임스텝마다 호출됩니다.

OnBecameVisible 및 OnBecameInvisible - 게임 오브젝트의 렌더러가 카메라의 뷰에 들어오거나 나갈 때 호출됩니다.

OnCollsionEnter 및 OnTriggerEnter - 물리 충돌 또는 트리거가 발생할 때 호출됩니다.

OnDestroy - 게임 오브젝트가 파괴될 때 호출됩니다.

 

 

MonoBehaviour

위의 내용은 Unity Documentation에 기록된 내용으로 이를 다시 정리하면 아래와 같이 정리할 수 있다.

MonoBehaviour는 중요 클래스로 유니티에서 C# 스크립트를 생성하면 자동으로 상속되는 클래스로

게임 오브젝트에 스크립트를 연결시킬 수 있게 해주는 클래스며,

자주 사용하는 메서드들이 이미 구현된 클래스이다.

 

다시 말해서 유니티를 사용하면서 많이 사용하는 메서드들이 구현되어있는 템플릿 클래스라고 할 수 있다.

(특히, MonoBehaviour를 상속받지 않고 다른 클래스를 상속받은 경우에는

게임 오브젝트에 연결되지 않았었는데 이를 정리하면서 이유를 알게 되었다)

 

MonoBehaviour를 사용하면 코루틴을 사용할 수 있으며 기본적으로 구현되어 있는 메서드들을 사용할 수 있다.

코루틴의 경우 이전에도 정리했던 적이 있고 여기에 정리하기에 내용이 많아서 다음에 정리할 예정이다.

 

 

MonoBehaviour의 이벤트들

MonoBehaviour를 상속받으면 사용할 수 있는 메서드들 중에서 자주 사용하는 것들을 정리한 이미지가 아래와 같다.

(모든 매서드가 있는 것이 아니고 자주 사용하는 것만 추려서 그렸습니다 정확한 내용은 아래의 링크를 참고해주세요)

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

자주 사용하는 매서드들의 순서 정리

 

Start와 Awake

Start - 스크립트가 활성화 된 직후에 Update 함수가 호출되기 전에 한 번만 호출된다.

Awake - 프리팹이 생성된 직후에 호출된다.

 

게임 오브젝트가 생성되고 실행되면 Awake가 실행되고, 그 후에 Start가 실행된다.

또, 이 두 매서드는 한 번만 실행되는 매서드이다.

 

이후에 FixedUpdate부터 LateUpdate는 게임이 실행되는 동안 조건 하에서 계속해서 실행되는 메서드들로

같은 종류라고 할 수 있는 Update 매서드들을 정리하면

 

FixedUpdate, Update, LateUpdate

FixedUpdate : 물리 계산이 일어나는 경우마다 호출된다.

Update : 매 프레임마다 호출된다.
LateUpdate :  매 프레임마다 update 함수가 호출된 후에 호출된다.

 

FixedUpdate의 경우에는 물리 계산이 일어나는 경우마다 호출되는 매서드로 Update보다 자주 일어날 수 있다.

특히, 아래에서 서술할 OnTrigger와 OnCollision 매서드들은 물리와 연결되어 있는데,

이들이 계산되기 전에 FixedUpdate가 실행되고 On 매서드들이 실행되는 것을 알 수 있다.

 

Update는 매 프레임마다 호출되는 매서드로 기본적으로 매 순간 실행된다고 할 수 있다.

이 Update와 연결되어 코루틴도 작동하는 것을 알 수 있다.

 

LateUpdate는 Update가 호출된 후에, 코루틴이 호출된 후에 Game logic에서 마지막으로 호출되는 매서드로,

Update의 결과물을 가지고 다시 계산하는 경우 등이 경우에 사용되는 매서드이다.

(특히 카메라의 움직임 등에 자주 이용된다)

 

OnTrigger : 두 물체 간의 접촉을 감지하여 이를 트리거로 삼아서 작동하는 매서드이다.

OnCollision : 두 물체 간의 물리 계산을 하는 매서드로 접촉하는 경우에 물리 연산을 한다는 것이 특징이다.

OnTrigger와 OnCollision은 뒤에 Enter, Stay, Exit의 세 종류가 올 수 있는데,

Enter는 이 스크립트를 갖고 있는 오브젝트에 접촉하는 순간,

Stay는 접촉해있는 동안, Exit은 빠져나가는 순간 실행되는 매서드이다.

실행 주기에서 Trigger가 먼저 일어나고 이후에 Collision이 일어나는데,

이는 두 물체가 접촉하는 순간 Trigger가 있다면 먼저 이를 실행시켜서 복잡한 물리 계산을 최소화하는 것이라고 생각된다.

 

Destroy : 오브젝트가 마지막 프레임에 대해 모든 프레임 업데이트가 끝난 후에 이 매서드가 호출된다.

이 Destroy 매서드를 통해서 사용이 끝난 오브젝트를 파괴할 수 있다.

 

 

오늘은 유니티의 MonoBehaviour를 알아보면서 이 클래스가 어떤 역할을 하는지 공부할 수 있었고

생명 주기를 직접 그려보면서 어떤 순서로 매서드들이 작동하는지도 알 수 있었다.

 

특히 FixedUpdate와 Update 사이에 OnTrigger, OnCollision 매서드가 작동하는 것과

Update 후에 코루틴이 작동하는 것은 알지 못했었는데,

이를 통해서 추후에 코드를 작성할 때, 동작될 순서를 적용할 수 있을 것이라고 느꼈다.

'IT > TIL' 카테고리의 다른 글

20240221_대충 만든 자판(프로그래머스)  (1) 2024.02.21
20240220_두 원 사이의 정수 쌍(프로그래머스)  (0) 2024.02.21
20240216_MVC 패턴  (0) 2024.02.19
20240215_디자인 패턴  (0) 2024.02.15
20240214_오브젝트 풀링  (0) 2024.02.14