【Unity 3D】学习笔记二十四:unity游戏脚本(四)

时间:2021-08-28 00:39:14

在开发中,游戏对象是可以相互继承和派生的。从父对象到子对象之间继承的数量就是任意的,那么对象之间要相互交互信息怎么办?

游戏对象之间交互通常使用广播机制,写这篇学习笔记为了总结学习下游戏之间广播发送和接受。首先在场景中创建父对象“gameobject”,它分别派生cubeA0和cubeA1。

其中:

cubeA0的子对象是cubeB0,cubeB0的子对象是cubeC0。

cubeA1的子对象是cubeB1,cubeB1的子对象是cubeC1。

【Unity 3D】学习笔记二十四:unity游戏脚本(四)

从图中可以看到,他们之间具有相互继承的关系,在这次例子中,将向这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);


运行结果:

【Unity 3D】学习笔记二十四:unity游戏脚本(四)


从上述代码可知,发送消息的方法SendMessageUpwards()都有两个参数,第一个为接受消息的方法名称,第二个为object类型对象,可将任意类型作为参数附加在消息中。

但在实际中,貌似用的最多的是SendMessage()方法,通过游戏对象可直接调用该方法,返回消息后,该对象身上绑定的所有脚本都可以接收到这个消息。