본문 바로가기
유니티/개념 정리

MonoBehaviour

by fore4022 2024. 10. 10.

유니티에서 새로운 c# Class를 생성하면, MonoBehaviour를 상속 받고 있다. MonoBehaviour가 무엇이기에 상속 받을까?


MonoBehaviour란?

유니티에 모든 Component Class들의 기반이다.

  • Component Class들은 게임을 만들기 위하여, 사용자가 생성한 GameObject에 추가 가능한 Class를 의미한다.

유니티에서 제공하는 다양한 이벤트를 사용할 수 있다.

  • 생명 주기, 메세지를 사용할 수 있다.
    • 생명 주기 : Start, Update 등
    • 메세지(Messages) : OnDestroy, OnCollisionEnter 등
  • 스크립트 상에서 최적화가 되어있기 때문에, Class 내에서 사용되지 않는 이벤트는 호출하지 않는다.

GameObject에 부착 가능하다.

  • MonoBehaviour를 상속 받은 Class는 GameObject에 추가 가능하다.

유니티에서 제공되는 함수를 사용할 수 있다.

  • GetComponent, Destroy 등의 함수를 사용할 수 있다.
  • 코루틴을 사용할 수 있다.

MonoBehaviour 구조

MonoBehaviour - Behaviour - Component - Object

MonoBehaviour

유니티의 함수를 사용 가능한 Class Component이다.

Behaviour

유니티의 Component 상태를 활성화/비활성화 한다.

Component

유니티의 모든 Component들의 기반 Class이다.

GameObject에 부착되어서, 해당 객체를 제어할 수 있도록 한다.

Object

유니티의 모든 객체의 최상위 클래스이다.


MonoBehaviour를 상속받지 않는 Component

MonoBehaviour를 상속 받는지 확인해 보기 위해서, 작성한 스크립트에서 Rigidbody, Animator 등을 디컴파일 해보았다. 확인한 결과는 아래와 같다.

Rigidbody : Component
Animator : Behaviour

Rigidbody는 Component, Animator는 Behaviour를 상속받는다.

"어떻게 해서 MonoBehaviour없이 Component에 추가되나요?"

예외적으로 유니티의 기본 Component들은, 유니티 엔진이 특별하게 관리해서, MonoBehaviour 없이 Component만 상속 받아서 사용이 가능하다. 그 중에서도 Rigidbody Component는 비활성화가 불가능하여서 Component만를 상속받고, Animator Component는 비활성화가 가능하여서 Behaviour를 상속 받은 것이다.


주의할 점

  • New() 키워드로 생성하는 것이 불가능하다.
    • 동적으로 사용하면 경고가 발생한다.
    • New()로 Instance를 생성할 수 없다. 왜냐하면, MonoBehaviour Class는 무조건 GameObject의 Component로 존재 해야한다.
  • 유니티 기본 Component들을 제외한, 다른 Component들은 Component Class를 상속해서 GameObject에 부착할 수 없다.
    • Component Class는 상속 받은 Class에서, GameObject를 제어할 수 있게 하는 것이지, Class를 Component화 하여서, 추가할 수 있게 해주는 것이 아니다.

'유니티 > 개념 정리' 카테고리의 다른 글

Non-MonoBehaviour  (0) 2024.10.14
GetComponentsInChildren  (0) 2024.10.11
UI 사이의 Event 전달  (0) 2024.10.07
EventSystem  (0) 2024.10.07
ScriptableObject  (0) 2024.09.30