可以跨GameObject、不用寫一長串去GetComponent就可以呼叫Method!
主要的參數如下:
SendMessage(函式的字串);
SendMessage(函式的字串,任意Object型態的參數);
SendMessage(函式的字串,SendMessageOptions);
SendMessage(函式的字串,任意Object型態的參數,SendMessageOptions);
除了SendMessage以外還有BroadcastMessage與SendMessageUpwards。
差別在:
SendMessage - 只針對指定的GameObject內部掛載的Component有用到的函式。
BroadcastMessage - 針對指定的GameObject內部、以及該GameObject Child所掛載的Component有用到的函式。
SendMessageUpwards - 針對指定的GameObject內部、以及該GameObject Parent掛載的Component有用到的函式。
至於SendMessageOptions,最重要的功能就是告訴它「要不要報錯」!
SendMessageOptions.RequireReceiver - 預設值,遇到找不到函式要報錯。
SendMessageOptions.DontRequireReceiver - 遇到找不到函式不報錯。
來看看範例!

我增加了幾個GameObject,並且都加上了掛有OnGetMessage這個函式的Component。
public void OnGetMessage(string mess)
{
Debug.Log(MyName + " : Hi! " + mess);
}
先從SendMessage開始!
void Start()
{
gameObject.SendMessage("OnGetMessage","send!",SendMessageOptions.RequireReceiver);
}
結果:
再來是SendMessageUpwards:
void Start()
{
gameObject.SendMessageUpwards("OnGetMessage", "send from my child!");
}
結果:
是的,連自己都接收到了!
可以在接收的函式(OnGetMessage)增加判斷。
最後是BroadcastMessage:
void Start()
{
gameObject.BroadcastMessage("OnGetMessage", "send from my parent!");
}
結果:
如果要讓Brother物件也能得到訊息怎麼辦?
void Start()
{
GameObject obj = GameObject.Find("Brother");
obj.SendMessage("OnGetMessage", "send from my Brother!");
}
結果:
解釋得很清楚,受益良多,謝謝您的分享!!
回覆刪除