发现Unity板块里大多都是人家做的pdf等资源,缺少详细的demo供研究。这里发一个关于SendMessage的使用方法。
有关gameobject的几个message方法可参见官方帮组文档,我这里是看的Unity圣典礼的。
1.GameObject.SendMessage方法的使用介绍。
在界面上创建2个Cube,Cube1和Cube2。分别为他们绑上SendMessage和ReceiveMessage。
我们简单的实现鼠标点击Cube1发送一个string给cube2的某个方法。
界面搭建我就不说怎么做的了,我只说代码部分。
界面效果:
在接受者的脚本里只需要写明一个函数,就行了。
public void getMessage(string message){
print ("i got a message:"+message);
}
这里提供一个string类型的参数,在SendMessage的第二个参数里传进来,SendMessage还有第三个参数,慢慢去研究吧。
类如下:
using UnityEngine;
using System.Collections;
public class ReceiveMessage : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void getMessage(string message){
print ("i got a message:"+message);
}
}
其实有些时候,不需要Start和Update都可以删掉。。。
然后处理,ReceiveMessage类了,他处理的只是鼠标MouseDown Cube1后使用SendMessage将信息发送出去。
找到Cube2组件:
private GameObject cube2;
void Start () {
findGameObject();
}
void findGameObject(){
cube2 = GameObject.Find("Cube2");
}
处理MouseDown:
void OnMouseDown(){
if(!cube2){
findGameObject();
}else{
string str = "cube1 has been clicked.";
print(str);
cube2.SendMessage("getMessage",str);
}
}
附上类:
using UnityEngine;
using System.Collections;
public class SendMessage : MonoBehaviour {
private GameObject cube2;
// Use this for initialization
void Start () {
findGameObject();
}
void findGameObject(){
cube2 = GameObject.Find("Cube2");
}
// Update is called once per frame
void Update () {
}
void OnMouseDown(){
if(!cube2){
findGameObject();
}else{
string str = "cube1 has been clicked.";
print(str);
cube2.SendMessage("getMessage",str);
}
}
}
然后分别绑定在Cube1,和Cube2上,运行。当鼠标点击Cube1是,就会触发OnMouseDown函数了,然后就将str传到Cube2的getMessage方法中去了。
最后如图
整个SendMessage就这么简单了。。。
当然在实际应用开发中要实际应用,这里只是简单的实现而已,而且实际中Unity的GameObject类里还提供了:SendMessageUpWards:向物体和父物体发送消息;
BroadCastMessage:对物体和所有子物体发送消息(广播消息)。