[UNITY] Update는 어떻게 자동으로 호출될까 ?

spixychz·2025년 11월 16일

Unity

목록 보기
13/14

궁금증

MonoBehaviour 클래스가 있다.
Unity의 라이프사이클 기능과 컴포넌트 기능을 사용하기 위한 클래스

  • 핵심 역할
    • 컴포넌트 단위로 게임 오브젝트에 부착
    • Unity 라이프 사이클 자동 호출 지원
    • Coroutine 사용 가능
  • 특징
    • AddComponent 또는 인스펙터에서 부착해야 정상 작동한다
      • new() 로는 불가능
    • Unity가 해당 객체의 생명주기를 직접 관리

Awake, Start, Update 같은 메소드들이 자동으로 호출된다.
그런데 override된 메소드도 아니고 있는지 없는지를 어떻게 알고 호출하는 건지 궁금해졌다.

Reflection

코드가 실행 중에 자기 자신 (클래스, 함수, 필드 등)을 들여다보고 조작할 수 있는 기능

  • 메소드, 프로퍼티, 어트리뷰트 정보를 메타데이터를 통해 읽는다.
var type = typeof(MyClass);
var method = type.GetMethod("TestMethod");
object instance = Activator.CreateInstance(type);

method.Invoke(instance, null);

Unity에서 MonoBehaviour 생명 주기 작동 과정

  1. 앱 실행
  2. C# 어셈블리 스캔
  3. MonoBehaviour를 상속한 클래스 목록 전부 스캔
  4. 메소드 캐시 테이블에 캐싱
    => 매 프레임이 아닌 단 한번만 Reflection 실행
  5. 게임 오브젝트에 컴포넌트가 붙는 순간, 해당 메소드를 호출 목록에 등록
    -> C++ 네이티브 객체와 C# 객체가 생성되고 연결
  6. Unity 엔진에서 캐싱된 테이블을 확인하고 메소드 등록
  7. 메인 루프에서 메소드 호출
profile
UNITY로 게임 개발하는 사람

0개의 댓글