1.创建一个游戏工程, 命名为SRMessageGo
![](https://i-blog.csdnimg.cn/blog_migrate/f08b847086fc81a0292c1a3f668392f7.png)
2.在Project视图中创建3个文件夹, Scene文件夹、Resources文件夹和Script文件夹
![](https://i-blog.csdnimg.cn/blog_migrate/4fd0a8bcc8fad151b0ccb1e3464250ab.png)
3.将当前场景保存为GameScene
![](https://i-blog.csdnimg.cn/blog_migrate/1d6a60ae75792b7244962febe6bba6c5.png)
4.创建SendMessage、MessageToAncestor SendMessageToChildren和ReceiveAncestorMessage ReceiveChildrenMessage、ReceiveMessage游戏脚本
![](https://i-blog.csdnimg.cn/blog_migrate/e936d65f56871730f5739d07d5a24084.png)
5.在Hierarchy视图中创建一个空的GameObject, 命名为GameManager, 在GameManager下创建一个Cube,并把SendMessage、ReceiveMessage、ReceiveChildrenMessage、SendMessageToChildren绑定在GameManager上, 把ReceiveAncestorMessage和MessageToAncestor绑定在Cube上
![](https://i-blog.csdnimg.cn/blog_migrate/7ed702c85f5de99adaaec9ffb32514b6.png)
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.代码清单
![](https://i-blog.csdnimg.cn/blog_migrate/f08b847086fc81a0292c1a3f668392f7.png)
2.在Project视图中创建3个文件夹, Scene文件夹、Resources文件夹和Script文件夹
![](https://i-blog.csdnimg.cn/blog_migrate/4fd0a8bcc8fad151b0ccb1e3464250ab.png)
3.将当前场景保存为GameScene
![](https://i-blog.csdnimg.cn/blog_migrate/1d6a60ae75792b7244962febe6bba6c5.png)
4.创建SendMessage、MessageToAncestor SendMessageToChildren和ReceiveAncestorMessage ReceiveChildrenMessage、ReceiveMessage游戏脚本
![](https://i-blog.csdnimg.cn/blog_migrate/e936d65f56871730f5739d07d5a24084.png)
5.在Hierarchy视图中创建一个空的GameObject, 命名为GameManager, 在GameManager下创建一个Cube,并把SendMessage、ReceiveMessage、ReceiveChildrenMessage、SendMessageToChildren绑定在GameManager上, 把ReceiveAncestorMessage和MessageToAncestor绑定在Cube上
![](https://i-blog.csdnimg.cn/blog_migrate/7ed702c85f5de99adaaec9ffb32514b6.png)
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.运行游戏