关于Unilty中SendMessage的使用
在Unity板块,大多资源是PDF等形式,缺乏详细的示例供开发者研究。本文将详细介绍SendMessage的使用方法。
相关官方文档说明
有关GameObject的几个消息方法,可参考官方帮助文档。本文参考的是Unity圣典礼相关资料。
GameObject.SendMessage方法使用介绍
场景搭建
在Unity界面上创建两个Cube,分别命名为Cube1和Cube2,并为它们分别绑定SendMessage和ReceiveMessage脚本。这里不详细阐述界面搭建过程,重点介绍代码部分。
接收消息脚本(ReceiveMessage)
在接收者的脚本里,只需定义一个接收消息的函数即可。以下是ReceiveMessage脚本的完整代码:
using UnityEngine;
using System.Collections;
public class ReceiveMessage : MonoBehaviour {
// 接收消息的方法
public void getMessage(string message) {
print("i got a message:" + message);
}
}
在这个脚本中,getMessage方法接受一个string类型的参数message,并将接收到的消息打印出来。实际上,在某些情况下,如果不需要Start和Update方法,可以将它们删除,因为它们在这个场景中并非必需。
发送消息脚本(SendMessage)
该脚本主要处理鼠标点击Cube1后,使用SendMessage将信息发送给Cube2的逻辑。以下是完整代码:
using UnityEngine;
using System.Collections;
public class SendMessage : MonoBehaviour {
private GameObject cube2;
// 初始化时查找Cube2
void Start() {
findGameObject();
}
// 查找Cube2的方法
void findGameObject() {
cube2 = GameObject.Find("Cube2");
}
// 处理鼠标点击事件
void OnMouseDown() {
if (!cube2) {
findGameObject();
} else {
string str = "cube1 has been clicked.";
print(str);
cube2.SendMessage("getMessage", str);
}
}
}
在这个脚本中:
Start方法在脚本初始化时调用findGameObject方法,用于查找Cube2。findGameObject方法通过GameObject.Find方法查找名为Cube2的游戏对象。OnMouseDown方法处理鼠标点击事件。当鼠标点击Cube1时,如果cube2未找到,则再次查找;如果已找到,则创建一个消息字符串str,并使用SendMessage方法将该消息发送给Cube2的getMessage方法。
运行测试
将上述两个脚本分别绑定到Cube1和Cube2上,运行游戏。当鼠标点击Cube1时,会触发OnMouseDown函数,将消息字符串发送到Cube2的getMessage方法中,Cube2会打印出接收到的消息。
其他相关消息方法
在实际应用开发中,Unity的GameObject类还提供了其他消息发送方法:
SendMessageUpwards:向物体和其父物体发送消息。BroadcastMessage:对物体和所有子物体发送消息(广播消息)。
通过这些方法,可以更灵活地在游戏对象之间传递消息。
综上所述,SendMessage方法为Unity开发者提供了一种简单而有效的方式来在游戏对象之间传递消息,通过合理使用这些消息传递方法,可以实现更复杂的游戏逻辑。