Posts 유니티 - 이벤트 함수는 어떻게 실행되는 것일까?
Post
Cancel

유니티 - 이벤트 함수는 어떻게 실행되는 것일까?

Unity Event Functions


유니티엔진에서 ‘스크립트’를 작성한다고 하면, 보통 MonoBahaviour를 상속받는 클래스의 스크립트를 작성하는 것을 떠올릴 것이다.

그리고 자연스럽게 이 클래스 내에 Awake(), Start(), Update() 등의 메소드를 작성하게 된다.

심지어 비주얼 스튜디오 같은 개발 환경에서는 이런 메소드들에 대해 자동 완성도 해주고, 메소드 위에는 Unity 메시지라는 글자도 띄워준다.

이런 메소드들은 ‘Unity Event Function’, ‘Unity Message’ 또는 ‘Magic Method’라고 불린다.


그런데 생각해보면 이 메소드들은 MonoBehaviour 또는 그 부모 클래스로부터 상속받은 메소드도 아닌데,

어떻게 유니티가 알아서 찾아 적절한 타이밍에 호출해줄 수 있는 걸까?

SendMessage() 메소드는 리플렉션을 기반으로 동작한다는데,

이벤트 함수도 마찬가지일까?


궁금해서 찾아보니,

image

이런 내용을 찾을 수 있었다.

정리해보면,

  • 유니티는 내부적으로 리플렉션을 이용해 매직 메소드를 호출하지 않는다.
  • Mono 또는 IL2CPP와 같은 스크립팅 런타임에 의해 CIL CodeMonoBehaviour에 접근할 때, 매직 메소드의 작성 여부를 검사하여 이를 캐싱한다.


Mono & IL2CPP


그렇다면 MonoIL2CPP란 무엇일까?

이를 이해하기 위해서는 일단 닷넷의 CLRCIL에 대해 이해할 필요가 있다.


Post Link : https://rito15.github.io/posts/cs-dotnet-compile/


다시 간단히 정리해보면,

CIL

  • Common Intermediate Language, 공통 중간 언어
  • .NET 고유의 객체지향 어셈블리 언어
  • .NET 환경에서 타겟 플랫폼에 관계 없이 자유롭게 개발할 수 있도록 도와주는 녀석

CLR

  • Common Language Runtime, 공통 언어 런타임
  • CIL Code -> Native Code로 컴파일해주는 가상 머신


image

MonoIL2CPP란, CIL CodeNative Code로 컴파일해주는 스크립팅 백엔드이다.

그러니까, .NET Framework에서 CLR이 수행하는 역할을 유니티에서 해주는 녀석들이다.


MonoJIT 컴파일을 통해 CIL Code -> Native Code로 변환해주고,

IL2CPPAOT 컴파일을 통해 CIL Code -> .NET Native Code로 변환해준다.


Mono는 유니티 자체 개발이 아니며,

IL2CPP는 유니티 자체 개발이다.


빌드 시간은 MonoIL2CPP보다 빠르고,

성능과 보안성은 IL2CPPMono보다 좋다.


References


This post is licensed under CC BY 4.0 by the author.

.NET 환경의 컴파일 과정 - CLR, CIL, JIT, AOT

유니티 - 마우스 커서가 UI 위에 있는지 검사하는 간단한 코드