Unity C# Monobehaviour

김효중·2025년 5월 15일

개요

Monobehaviour는 유니티에서 대부분의 게임 오브젝트가 상속 받는 클래스이다.
유니티에서 C# 파일을 생성할 때 상속을 받는 클래스이며 Start, Update등의 생명주기 함수
를 갖는다.

하지만 MonoBehavior는 단순한 C# 클래스가 아니다.

Monobehaviour란?

유니티의 게임 오브젝트에 붙은 기본 동작 단위이다.
유니티는 이런한 Monobehaviour에 대해 다음과 같은 기능을 제공한다.

  • 생명주기 함수 (Awake, Start, Update, OnDestroy 등등)
  • 코루틴 처리
  • 인스펙트 노출 및 직력화
  • 콜라이더, 트리거의 충돌 처리
public class NewMonobehaviour : MonoBehaviour {
    void Start() {
        // 초기화 로직
    }

    void Update() {
        // 매 프레임마다 호출
    }
}

유니티와 C++

유니티는 게임 엔진의 핵심 로직을 c++로 구현하고, 그위에 C# 레이어(Mono/.NET)를 추가하는 구조이다.
그렇기에 C# 코드의 실제 동작은 C++코드로 동작한다.

유니티의 게임 오브젝트, 컴포넌트는 C++ 객체로 구성되어 있다.
이를 바인딩이라 하며 C++ 엔진이 C# 스크립트를 호출하고 이벤트를 전달할 수 있도록 구성된다.

게임 오브젝트에 컴포넌트(PlayerController)가 붙음
-> 유니티는 C++쪽에서 게임 오브젝트를 생성하고 내부적으로 Monobehaviour 객체를 할당한다.
-> C++에서 C# 런터임을 호출하여 PlayerController 인스턴스를 생성
-> 매 프레임마다 C++ 엔진이 Update등의 생명주기 함수를 호출 여부를 체크하고 C#에서 이를 실행

일반 클래스 vs Monobehaviour

Monobehavior는 일반적인 C#과 다르게 작동한다.

  • C#
    일반적인 클래스로 C++과 연결되지 않는다.
    new()를 통해 객체 생성한다
    게임 오브젝트에 컴포넌트로 부착 불가능하다
    생명주기 함수가 없다

  • Unity
    C++ 엔진과 연결된다.
    new()가 아닌 Instantiate, GetComponent를 이용해 생성한다.
    게임 오브젝트에 컴포넌트로 부착 가능

결론

유니티는 IL2CPP(Intermediate Language To C++)라는 기술을 통해 최종적으로 C# 코드조차도 C++로 변환하여 빌드할 수 있다.
개발중에는 Mono를 통해 C#으로 실행되며 빌드시 IL2CPP를 통해 C++로 변환되어 네이티브 바이너리에 포함된다.

즉 유니티의 C# Monobehaviour는 C++로 변환된 네이티브 코드로 변환된다.

profile
도전하는 개발자

0개의 댓글