为了方便多个物体间的消息传达与接收,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())//点击鼠标左键执行以下操作
{
SendMessage("Example1", , 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正好相反,对当前对象(自身)及它的子物体所挂载的所有脚本发送消息有效,对其父物体无效,对其他物体无效。

Unity的3种消息传递方法(SendMessage等)的更多相关文章

  1. 关于Unity的两种调试方法

    Unity的两种调试方法 1.Debug.Log()输出语句调试,平时经常用这个 2.把MonoDevelop和Unity进行连接后断点调试 先把编辑器选择为MonoDevelop,Edit----& ...

  2. Android中定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runn ...

  3. Android中定时器的3种实现方法

    原文:http://blog.csdn.net/wulianghuan/article/details/8507221 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与 ...

  4. 【转】Android中定时器的3种实现方法

    原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的s ...

  5. 在Android开发中,定时器一般有以下3种实现方法

    在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...

  6. 在Android开发中,定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...

  7. [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式

    本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...

  8. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

  9. 深入理解javascript选择器API系列第三篇——h5新增的3种selector方法

    × 目录 [1]方法 [2]非实时 [3]缺陷 前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuer ...

随机推荐

  1. HTML5圆形百分比进度条插件circleChart

    在页面中引入jquery和circleChart.min.js文件. <script src="path/to/jquery.min.js"></script&g ...

  2. [lua]紫猫lua教程-命令宝典-L1-01-05. if判断结构

    L1[if]01. 简单的if判断结构 没什么说得 if得基本结构如下 xxx= ) then testlib.traceprint("1-100") ) then testlib ...

  3. iptables详解(2):四表五链

    关于iptables中“四表五链”,我们今天来好好唠唠: 1.表的概念: 我们把具有相同功能的规则的集合叫做"表",所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而ip ...

  4. py1

    python 下载安装  https://python.org python解释性语言 python数据结构 *输入输出 print(12,34,56,end='',sep='*') input() ...

  5. IDF-CTF-简单的Elf逆向Writeup

    ElfCrackMe1 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

  6. web项目获取路径

    Java获取路径的各种方法:  (1).request.getRealPath("/"); //不推荐使用获取工程的根路径 (2).request.getRealPath(requ ...

  7. 手机CPU那些事

    原文:https://zhuanlan.zhihu.com/p/19923974 如今人们买手机,都比较关心采用了什么 CPU,因为 CPU 直接决定了这台手机的性能,CPU 之于手机 就好比人的大脑 ...

  8. Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解

    题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角 ...

  9. Laravel 解决在ajax 请求下不能保存session的问题

    Laravel 解决在ajax 请求下不能保存session的问题 \Session::put('isLogin',true); // 你要保存的session key \Session::put(' ...

  10. 【PAT甲级】1100 Mars Numbers (20 分)

    题意: 输入一个正整数N(<100),接着输入N组数据每组包括一行字符串,将其翻译为另一个星球的数字. AAAAAccepted code: #define HAVE_STRUCT_TIMESP ...