유니티 공식 스크립팅 API에 따르면, 아래와 같은 코드로 SendMessage()를 활용하고 있다.
무척 유용해 보이지만 성능 상의 이유로 잘 쓰지 않는다.
using UnityEngine;
public class Example : MonoBehaviour
{
void Start()
{
// Calls the function ApplyDamage with a value of 5
// Every script attached to the game object
// that has an ApplyDamage function will be called.
gameObject.SendMessage("ApplyDamage", 5.0);
}
}
public class Example2 : MonoBehaviour
{
public void ApplyDamage(float damage)
{
print(damage);
}
}
https://docs.unity3d.com/ScriptReference/GameObject.SendMessage.html
공식 문서에는 이런 성능 문제에 대한 언급은 없다.
책 [유니티 C# 스크립팅 마스터하기]에 따르면,
내부적으로 C#의 리플렉션(reflection)이라는 기능에 의존한다. 문자열을 이용해 함수를 부르면, 애플리케이션은 실행 중에 스스로를 살펴보고 실행할 코드를 찾는다. 이런 과정은 일반적인 방법으로 함수를 실행할 때보다 무거운 연산을 필요로 한다. 그렇기 때문에 SendMessage와 BroadcastMessage의 사용을 최소화하도록 한다.
'Engine > Unity' 카테고리의 다른 글
[Unity] GameObject.FindGameObjectWithTag() 빠르지만 안 쓰는 이유 (0) | 2022.09.15 |
---|---|
[Unity] private 변수를 에디터 인스펙터 상에서 보려면 (디버깅 용) (0) | 2022.09.15 |
Unity & C# 코딩 컨벤션이 고민 된다면 (0) | 2022.07.13 |
[Unity 2021.3.2f1 LTS] 못 보던 프로젝트 템플릿이 생기다! (0) | 2022.07.13 |
요즘 유니티 엔진 에셋스토어 수준 (0) | 2022.07.11 |