您的位置:首页 > 其它

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

2018-04-03 13:47 609 查看
1.创建一个游戏工程, 命名为SRMessageGo



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



3.将当前场景保存为GameScene



4.创建SendMessageSend、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");
}
}

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: