关于Unilty中SendMessage的使用

2015年03月14日 11:49 0 点赞 0 评论 更新于 2017-05-08 05:53

在Unity板块,大多资源是PDF等形式,缺乏详细的示例供开发者研究。本文将详细介绍SendMessage的使用方法。

相关官方文档说明

有关GameObject的几个消息方法,可参考官方帮助文档。本文参考的是Unity圣典礼相关资料。

GameObject.SendMessage方法使用介绍

场景搭建

在Unity界面上创建两个Cube,分别命名为Cube1Cube2,并为它们分别绑定SendMessageReceiveMessage脚本。这里不详细阐述界面搭建过程,重点介绍代码部分。

接收消息脚本(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,并将接收到的消息打印出来。实际上,在某些情况下,如果不需要StartUpdate方法,可以将它们删除,因为它们在这个场景中并非必需。

发送消息脚本(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);
}
}
}

在这个脚本中:

  1. Start方法在脚本初始化时调用findGameObject方法,用于查找Cube2
  2. findGameObject方法通过GameObject.Find方法查找名为Cube2的游戏对象。
  3. OnMouseDown方法处理鼠标点击事件。当鼠标点击Cube1时,如果cube2未找到,则再次查找;如果已找到,则创建一个消息字符串str,并使用SendMessage方法将该消息发送给Cube2getMessage方法。

运行测试

将上述两个脚本分别绑定到Cube1Cube2上,运行游戏。当鼠标点击Cube1时,会触发OnMouseDown函数,将消息字符串发送到Cube2getMessage方法中,Cube2会打印出接收到的消息。

其他相关消息方法

在实际应用开发中,Unity的GameObject类还提供了其他消息发送方法:

  • SendMessageUpwards:向物体和其父物体发送消息。
  • BroadcastMessage:对物体和所有子物体发送消息(广播消息)。

通过这些方法,可以更灵活地在游戏对象之间传递消息。

综上所述,SendMessage方法为Unity开发者提供了一种简单而有效的方式来在游戏对象之间传递消息,通过合理使用这些消息传递方法,可以实现更复杂的游戏逻辑。

作者信息

boke

boke

共发布了 1025 篇文章