微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity的3种消息传递方法SendMessage等

为了方便多个物体间的消息传达与接收,Unity中包含了几种消息推送机制 :

分别为SendMessage、SendMessageUpwards、broadcastMessage。

我们首先以SendMessage为例:

public void SendMessage(string methodName,object value,SendMessageOptions options);

可以看到它有三个参数,分别为“被调用目标方法方法名”、“传递给目标方法的参数”、“当目标方法不存在时,是否告知开发者(是否打印错误)”

下面我们制作简单的项目Demo测试:

新建场景并设置以下4个物体的层级关系如图,其中Parent物体挂载“test1”和“test2”脚本,Grandparent 和 Child 以及 Other挂载“test2”脚本

 test1 和 test2脚本:(test1脚本包括消息发送和接收方法,test2脚本仅包括消息接收方法

using UnityEngine;public class test1 : MonoBehavIoUr {void Update()
    {if (Input.GetMouseButtonDown(0))//点击鼠标左键执行以下操作         {
            SendMessage("Example1", 123, SendMessageOptions.DontRequireReceiver);//尝试调用“Example1”方法        }
    }void Example1(int i)
    {
         Debug.Log(name+"  :test1  :"+ i);}
}

using UnityEngine;public class test2 : MonoBehavIoUr {void Example1(int i)
    {
         Debug.Log(name+"  :test2  :"+ i);}
}

运行程序并点击鼠标左键,得到输出结果如下 :(挂载test1的“Parent”物体接收到)

 

 可以得出结论:SendMessage的消息传递机制,仅对当前对象(自身)所挂载的所有脚本发送消息有效,对父物体及其子物体无效,对其他物体无效。

 

同样的,我们分别编写代码对SendMessageUpwards、broadcastMessage进行测试,

根据输出结果,可分别得出结论:

SendMessageUpwards的消息传递机制,对当前对象(自身)及它的父物体所挂载的所有脚本发送消息有效,对其子物体无效,对其他物体无效。

broadcastMessage的消息传递机制,与SendMessageUpwards正好相反,对当前对象(自身)及它的子物体所挂载的所有脚本发送消息有效,对其父物体无效,对其他物体无效。


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐