1.创建一个游戏工程, 命名为SRMessageGo

2.在Project视图中创建3个文件夹, Scene文件夹、Resources文件夹和Script文件夹

3.将当前场景保存为GameScene

4.创建SendMessage、MessageToAncestor SendMessageToChildren和ReceiveAncestorMessage ReceiveChildrenMessage、ReceiveMessage游戏脚本

5.在Hierarchy视图中创建一个空的GameObject, 命名为GameManager, 在GameManager下创建一个Cube,并把SendMessage、ReceiveMessage、ReceiveChildrenMessage、SendMessageToChildren绑定在GameManager上, 把ReceiveAncestorMessage和MessageToAncestor绑定在Cube上

6.游戏对象发送消息的方法
(1).GameObject.SendMessage(string methodName,object value,SendMessageOptions option), 是向该游戏对象上的所有Monobehavior脚本发送消息。
(2).GameObject.BroadcastMessage(string methodName,object value,SendMessageOptions option), 是向该游戏对象以及子游戏对象上的所有Monobehavior脚本发送消息。
(3).GameObject.SendMessageUpwards(string methodName,object value,SendMessageOptions option), 是向该游戏对象以及祖游戏对象上的所有Monobehavior脚本发送消息。
(4).第一个参数是消息的名称, 游戏对象所有Monobehavior脚本里与该名称同名的方法将被调用。
(5).第二个参数是向该方法传递的参数。
(6).第三个参数是是否必须有接收方法, SendMessageOptions.DontRequireReceiver不要求必须有接收方法, SendMessageOptions.RequireReceiver必须有接收方法, 没有报错。
7.代码清单

2.在Project视图中创建3个文件夹, Scene文件夹、Resources文件夹和Script文件夹

3.将当前场景保存为GameScene

4.创建SendMessage、MessageToAncestor SendMessageToChildren和ReceiveAncestorMessage ReceiveChildrenMessage、ReceiveMessage游戏脚本

5.在Hierarchy视图中创建一个空的GameObject, 命名为GameManager, 在GameManager下创建一个Cube,并把SendMessage、ReceiveMessage、ReceiveChildrenMessage、SendMessageToChildren绑定在GameManager上, 把ReceiveAncestorMessage和MessageToAncestor绑定在Cube上

6.游戏对象发送消息的方法
(1).GameObject.SendMessage(string methodName,object value,SendMessageOptions option), 是向该游戏对象上的所有Monobehavior脚本发送消息。
(2).GameObject.BroadcastMessage(string methodName,object value,SendMessageOptions option), 是向该游戏对象以及子游戏对象上的所有Monobehavior脚本发送消息。
(3).GameObject.SendMessageUpwards(string methodName,object value,SendMessageOptions option), 是向该游戏对象以及祖游戏对象上的所有Monobehavior脚本发送消息。
(4).第一个参数是消息的名称, 游戏对象所有Monobehavior脚本里与该名称同名的方法将被调用。
(5).第二个参数是向该方法传递的参数。
(6).第三个参数是是否必须有接收方法, SendMessageOptions.DontRequireReceiver不要求必须有接收方法, SendMessageOptions.RequireReceiver必须有接收方法, 没有报错。
7.代码清单
using UnityEngine;
public class SendMessageToChildren : MonoBehaviour
{
// send to children addCoin message
void Awake()
{
gameObject.BroadcastMessage("addCoin", 1000, SendMessageOptions.DontRequireReceiver);
}
}
using UnityEngine;
public class ReceiveAncestorMessage : MonoBehaviour
{
// receive ancestor addCoin message
void addCoin(int count)
{
Debug.Log ("add " + count + " coin");
}
}
using UnityEngine;
public class SendMessageToAncestor : MonoBehaviour
{
// send to ancestor addCoinOver message
void Start ()
{
gameObject.SendMessageUpwards ("addCoinOver", SendMessageOptions.DontRequireReceiver);
}
}
using UnityEngine;
public class ReceiveChildrenMessage : MonoBehaviour
{
// receive children addCoinOver message
void addCoinOver ()
{
Debug.Log ("receive children addCoinOver message");
}
}
using UnityEngine;
public class SendMessage : MonoBehaviour
{
private bool hasFirstUpdate = false;
// send UseCoin message
void Update ()
{
if (!hasFirstUpdate)
{
hasFirstUpdate = true;
gameObject.SendMessage ("UseCoin", SendMessageOptions.DontRequireReceiver);
}
}
}
using UnityEngine;
public class ReceiveMessage : MonoBehaviour
{
// receive use coin message
void UseCoin()
{
Debug.Log ("receive use coin message");
}
}
8.运行游戏