본문으로 바로가기

[Unity] SendMessage

category Game Development/Unity 2024. 9. 1. 15:05

SendMessage : 특정 메서드를 간단하게 호출하는 기능

게임 오브젝트에 있는 모든 컴포넌트에 대해 지정된 이름의 메서드를 호출할 수 있다.

hit.collider.SendMessage("호출할 메서드 이름", SendMessageOptions);

[SendMessageOptions]

SendMessageOptions.RequireReceiver: 호출한 메서드가 반드시 있어야 하며, 없을 경우 오류가 발생

SendMessageOptions.DontRequireReceiver: 호출한 메서드가 없어도 무시되며, 오류가 발생하지 않음

 

[SendMessage의 장점]

유연성: 오브젝트가 어떤 컴포넌트를 가지고 있는지 정확히 몰라도 특정 메서드 호출이 가능함

간결함: 특정 컴포넌트를 GetComponent로 일일이 찾지 않고도 메서드 호출이 가능해 코드가 간결해짐

모듈화: 다양한 오브젝트에서 동일한 메서드를 호출할 때 유용하며, 코드의 모듈화를 도움

 

[SendMessage의 단점]

오타에 취약: 메서드 이름을 문자열로 지정

성능 저하 가능성: 모든 컴포넌트를 검사하기 때문에, 매우 자주 호출되는 경우 성능에 영향을 미칠 수 있음

직접적이지 않음: 추적이 어렵기 때문에, 코드의 가독성이 떨어질 수 있음

 

+

여러 단점도 있으므로, 코드의 복잡도나 성능 요구사항에 따라 사용 여부를 결정하는 것이 좋다.

프로젝트가 간단하거나, 오브젝트가 많고 다양한 경우, SendMessage는 적합한 해결책이 될 수 있다.

 

[사용 예]

레이에 충돌한 오브젝트의 Interact 함수를 호출하는 코드

'Game Development > Unity' 카테고리의 다른 글

[Unity] 안개 - Fog 설정  (0) 2024.09.05
[Unity] Cinemachine  (1) 2024.09.03
[Unity] Raycast(레이캐스트)  (0) 2024.09.01
[Unity] 스크립트 실행 순서 'Script Execution Order'  (0) 2024.08.25
[Unity] 터레인 (Terrain) 생성  (0) 2024.08.20