关于Unilty中SendMessage的使用。

文章摘自http://bbs.9ria.com/thread-256852-1-1.html べ枫叶枝_

1.GameObject.SendMessage方法的使用介绍。
在界面上创建2个Cube,Cube1和Cube2。分别为他们绑上SendMessage和ReceiveMessage。
我们简单的实现鼠标点击Cube1发送一个string给cube2的某个方法。
界面搭建我就不说怎么做的了,我只说代码部分。
界面效果:



在接受者的脚本里只需要写明一个函数,就行了。

  1. public void getMessage(string message){
  2. print ("i got a message:"+message);        
  3.         }
复制代码
这里提供一个string类型的参数,在SendMessage的第二个参数里传进来,SendMessage还有第三个参数,慢慢去研究吧。
类如下:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class ReceiveMessage : MonoBehaviour {

  4.         // Use this for initialization
  5.         void Start () {
  6.         
  7.         }
  8.         
  9.         // Update is called once per frame
  10.         void Update () {
  11.         
  12.         }
  13.         
  14.         public void getMessage(string message){
  15.                 print ("i got a message:"+message);        
  16.         }
  17. }
复制代码
其实有些时候,不需要Start和Update都可以删掉。。。
然后处理,ReceiveMessage类了,他处理的只是鼠标MouseDown Cube1后使用SendMessage将信息发送出去。
找到Cube2组件:
  1. private GameObject cube2;
  2. void Start () {
  3.                 findGameObject();
  4.         }
  5. void findGameObject(){
  6.                 cube2 = GameObject.Find("Cube2");
  7.         }
复制代码


处理MouseDown:
  1. void OnMouseDown(){
  2.                 if(!cube2){
  3.                         findGameObject();
  4.                 }else{
  5.                         string str = "cube1 has been clicked.";
  6.                         print(str);        
  7.                         cube2.SendMessage("getMessage",str);
  8.                 }
  9.         }
复制代码
附上类:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class SendMessage : MonoBehaviour {
  4.         
  5.         private GameObject cube2;
  6.         
  7.         // Use this for initialization
  8.         void Start () {
  9.                 findGameObject();
  10.         }
  11.         void findGameObject(){
  12.                 cube2 = GameObject.Find("Cube2");
  13.         }
  14.         
  15.         // Update is called once per frame
  16.         void Update () {
  17.                
  18.         }
  19.         void OnMouseDown(){
  20.                 if(!cube2){
  21.                         findGameObject();
  22.                 }else{
  23.                         string str = "cube1 has been clicked.";
  24.                         print(str);        
  25.                         cube2.SendMessage("getMessage",str);
  26.                 }
  27.         }
  28.         
  29. }
复制代码
然后分别绑定在Cube1,和Cube2上,运行。当鼠标点击Cube1是,就会触发OnMouseDown函数了,然后就将str传到Cube2的getMessage方法中去了。
最后如图:


整个SendMessage就这么简单了。。。
当然在实际应用开发中要实际应用,这里只是简单的实现而已,而且实际中Unity的GameObject类里还提供了:SendMessageUpWards:向物体和父物体发送消息;
BroadCastMessage:对物体和所有子物体发送消息(广播消息)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值