유니티에서 새로운 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 |