发现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:对物体和所有子物体发送消息(广播消息)。