游戏对象之间发送和接收消息

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.代码清单
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.运行游戏


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值