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

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.运行游戏


猜你喜欢

转载自blog.csdn.net/aihiao/article/details/79802177