07
16

BroadcastMessage, SendMessage, SendMessageUpwards 함수는?

세 가지 함수는 다른 GameObject 간의 통신에 사용될 수 있다.

메시지를 보내는 측은 메서드 이름과 필요한 매개변수를 지정하고,
메시지를 받는 측은 해당 메서드를 구현하여 메시지를 처리한다.

BroadcastMessage 함수

BroadcastMessage 함수는 현재 GameObject 및 해당 자식 GameObject에 대해 특정 메서드를 호출한다.

이 함수를 사용하여 특정 메서드를 GameObject 계층 구조 전체에 대해 호출할 수 있다.
public class MyScript : MonoBehaviour
{
  public void MyMethod(string message)
  {
      Debug.Log(message);
  }
  // BroadcastMessage를 사용하여 MyMethod 호출  
  gameObject.BroadcastMessage("MyMethod", "Hello World");

SendMessage 함수

SendMessage 함수는 특정 GameObject에 대해 특정 메서드를 호출한다.

이 함수를 사용하여 특정 GameObject에 메시지를 보낼 수 있다.

메시지를 받을 GameObject가 특정 메서드를 구현해야 한다.
public class MyScript : MonoBehaviour  
{  
public void MyMethod(string message)  
{  
Debug.Log(message);  
}  
}
// SendMessage를 사용하여 MyMethod 호출  
gameObject.SendMessage("MyMethod", "Hello World");

SendMessageUpwards 함수

SendMessageUpwards 함수는 현재 GameObject부터 상위 계층으로 올라가며 특정 메서드를 호출한다.

이 함수를 사용하여 특정 메서드를 현재 GameObject의 부모 및 상위 계층 GameObject에 대해 호출할 수 있다.

호출할 메서드는 상위 계층 GameObject에 있는 스크립트에 있어야 합니다
public class MyScript : MonoBehaviour  
{  
public void MyMethod(string message)  
{  
Debug.Log(message);  
}  
}
// SendMessageUpwards를 사용하여 MyMethod 호출  
gameObject.SendMessageUpwards("MyMethod", "Hello World");

세 함수의 차이는?

BroadcastMessage를 사용하여 "OnPlayerHit"이라는 메서드를 호출하면 현재 GameObject와 해당 자식 GameObject에 있는 모든 스크립트의 "OnPlayerHit" 메서드가 호출된다.
SendMessage와 SendMessageUpwards 함수는 특정 GameObject에 메시지를 보내고 해당 GameObject에서 메서드를 호출합니다.

매개변수 설명

세 함수 모두 함수의 정의에서 매개변수가 같다.
public void BroadcastMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);
두 번째 매개변수 (object parameter)
: 두 번째 매개변수는 호출할 메서드에 전달할 매개변수를 지정하는 데 사용된다.
  이 매개변수는 object 타입으로 선언되어 있으며, 호출할 메서드의 매개변수와 일치해야 한다.
  예를 들어, 호출할 메서드가 string을 매개변수로 받는다면 두 번째 매개변수에 string 값을 전달할 수 있다.
  매개변수가 필요 없는 경우에는 기본값으로 null을 지정할 수 있다.
세 번째 매개변수 (SendMessageOptions options)
: 세 번째 매개변수는 메시지 전송 옵션을 설정하는 데 사용된다.
  SendMessageOptions 열거형으로 선언되어 있으며, 다음과 같은 옵션을 선택할 수 있다

SendMessageOptions.RequireReceiver
: 메시지를 받는 컴포넌트가 존재하지 않으면 무시된다. (기본값)
  일반적으로 이 옵션을 사용하여 메시지를 받을 컴포넌트가 있는지 확인한 후에 호출하는 것이 좋다.

SendMessageOptions.DontRequireReceiver
: 메시지를 받는 컴포넌트가 없더라도 무시되지 않고 처리된다.
  모든 경우에 메서드 호출을 보장하는 것이 필요한 경우에 사용될 수 있다.

 

COMMENT