이 글은 PC 버전 TISTORY에 최적화 되어있습니다.
서론
이번에는 SendMessage와 BroadcastMessage를 이용해서 오브젝트의 붙은 컴포넌트의 함수를 이름으로 호출하는 방법에 대해서 배워보도록 하겠습니다.
SendMessage
SendMessage("Function", SendMessageOptions.DontRequireReceiver);
위와 같은 명령어로 사용합니다. 이 오브젝트에 붙어 있는 모든 컴포넌트/스크립트에서 Function이라는 함수명을 찾아 실행합니다. 첫 번째 인자는 호출할 메소드의 이름이고, 두 번째 인자는 호출할 객체가 없을 때 어떻게 에러 처리할 지를 지정합니다. 자세한 내용은 여기를 참고하시길 바랍니다.
BroadcastMessage
BroadcastMessage("Function", SendMessageOptions.DontRequireReceiver);
이 함수는 SendMessage와 유사하나 게임 오브젝트의 모든 컴포넌트마다 지명한 함수를 부르고, 더해서 씬 계층상의 모든 자식 오브젝트와 그 자식 오브젝트의 모든 컴포넌트도 찾아서 실행합니다.
리플렉션
일반적으로 우리는 클래스에 접근하기 위해 인스턴스를 생성하고 그를 통해 변수나 함수에 접근합니다. 그럴 필요 없이 SendMessage나 BrodcastMessage를 이용하면 오브젝트 간, 그리고 컴포넌트 통신이 매우 쉬워지는 것을 볼 수 있습니다. 하지만 이러한 편리함에는 단점이 따라오기 마련입니다. 두 함수에는 C#의 리플렉션이라는 기능이 담겨있는데, 문자열을 통해서 함수를 살펴보면서 무거운 연산을 수반합니다. 또한 함수명을 이용해 부르므로 선택적으로 부를 수 없다는 단점이 있습니다. 이는 다음에 델리게이트와 인터페이스를 이용한 이벤트 매니저를 통해서 해결해보도록 하겠습니다.
반응형
'Frontend > Unity' 카테고리의 다른 글
[유니티 에셋번들 사용법] 2. 에셋번들의 생성 및 빌드 (15) | 2016.11.25 |
---|---|
[유니티 에셋번들 사용법] 1. 에셋번들이란? (2) | 2016.11.25 |
모노디벨롭에서 unsafe 모드 실행하기 (0) | 2016.11.23 |
[유니티 트랜스폼] 카메라 추적 (Follow Cam) (1) | 2016.08.04 |
[유니티 트랜스폼] 회전 (Rotate) (0) | 2016.08.04 |
[유니티 기초] 유니티 생명주기 (Life Cycle) (0) | 2016.08.04 |