快速連結

2014年11月30日

關於SendMessage的筆記

SendMessage主要是用來做呼叫特定函式(Method或Function)。
可以跨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!");
}
結果:

1 則留言:

  1. 解釋得很清楚,受益良多,謝謝您的分享!!

    回覆刪除

歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT