在开发中,游戏对象是可以相互继承和派生的。从父对象到子对象之间继承的数量就是任意的,那么对象之间要相互交互信息怎么办?
游戏对象之间交互通常使用广播机制,写这篇学习笔记为了总结学习下游戏之间广播发送和接受。首先在场景中创建父对象“gameobject”,它分别派生cubeA0和cubeA1。
其中:
cubeA0的子对象是cubeB0,cubeB0的子对象是cubeC0。
cubeA1的子对象是cubeB1,cubeB1的子对象是cubeC1。
从图中可以看到,他们之间具有相互继承的关系,在这次例子中,将向这6个子对象绑定盒子的游戏脚本,用来接收与发送消息。
在游戏对象之间发送广播与消息可以分为3种:
- 向子对象发送,发送至同辈对象或者子孙对象中。
- 给自己发送,发给自身。
- 向父辈对象发送,发送至对象的同辈或者父辈对象中。
A0的代码:
function Start () {
//gameObject.BroadcastMessage ("ReceiveBroadcastMessage", "A0-----BroadcastMessage()");
//gameObject.SendMessage ("ReceiveSendMessage", "A0-----SendMessage()");
gameObject.SendMessageUpwards ("ReceiveSendMessage", "A0-----SendMessageUpwards()");
}
function ReceiveBroadcastMessage(str : String){
Debug.Log("A0----Receive" +str);
}
function ReceiveSendMessage(str : String){
Debug.Log("A0----Receive" +str);
}
function ReceiveSendMessageUpwards (str : String){
Debug.Log("A0----Receive" +str);
}
B0的代码:
function Start () {
//gameObject.BroadcastMessage ("ReceiveBroadcastMessage", "B0-----BroadcastMessage()");
//gameObject.SendMessage ("ReceiveSendMessage", "B0-----SendMessage()");
gameObject.SendMessageUpwards ("ReceiveSendMessage", "B0-----SendMessageUpwards()");
}
function ReceiveBroadcastMessage(str : String){
Debug.Log("B0----Receive" +str);
}
function ReceiveSendMessage(str : String){
Debug.Log("B0----Receive" +str);
}
function ReceiveSendMessageUpwards (str : String){
Debug.Log("B0----Receive" +str);
}
C0,A1,B1,C1的代码如上面代码,只需要修改**就行。
Debug.Log("**----Receive" +str);
运行结果:
从上述代码可知,发送消息的方法SendMessageUpwards()都有两个参数,第一个为接受消息的方法名称,第二个为object类型对象,可将任意类型作为参数附加在消息中。
但在实际中,貌似用的最多的是SendMessage()方法,通过游戏对象可直接调用该方法,返回消息后,该对象身上绑定的所有脚本都可以接收到这个消息。