为了方便多个物体间的消息传达与接收,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. [坑] js indexOf is not a function

    今天写js的时候,本来没有问题的代码突然出现了问题,就是本来下拉框里面在更新之后会出现内容的 但是并没有出现内容,按下F12 查看了Console之后发现确实是接收到了数据,但是却也报错了 内容是 我 ...

  2. Caffe实例

    下载链接以及说明:  1.caffe代码按照官方教程下载windows分支下面的就可以了(https://github.com/BVLC/caffe/tree/windows). 2.cmake(ht ...

  3. Httpclient 工具类(get,put)

    package com.googosoft.until; import java.io.IOException; import org.apache.http.HttpEntity; import o ...

  4. HahMap相关问题

    概述 文章对HashMap的部分细节进行介绍,JDK1.7之前有可能出现环形表的问题,而1.7之后进行了改进,文章对环形表现象的出现进行了解析,然后对HashMap注意的几个问题进行了解答. Hash ...

  5. 设置textarea不可拉伸

    默认情况下,我们将鼠标移动到textarea的右下角时发现文本域是可以通过拖动的方式改变其大小的,这会影响我们原本的页面布局.若想设置其不可拖动,可为其添加如下属性: style="resi ...

  6. kindeditor文件上传设置文件说明为上传文件名(JSP版)

    编辑器换成kindeditor时发现文件上传后,直接点确定,<a>便签中的内容显示的是文件路径,不是我想要的文件名,我试了百度上的一些设置方法都不行的,百度上大部分都是修改pugins/i ...

  7. The Preliminary Contest for ICPC Asia Xuzhou 2019 K. Center

    这题对于能加入最多边缘点的center点,这个点就是最优的center ,对于center点,总共是n^2的,顶多也就1e6,所以直接双重循环就行了, 然后map<pair,set >映射 ...

  8. 不需要图片,css+svg绘制动态loading加载图标

    1.html 部分: <div id="refershDiv" class="refershDiv"> <svg xmlns="ht ...

  9. go get下载包失败问题

    文章引用自 解决go get下载包失败问题 从github克隆 golang在github上建立了一个镜像库,如https://github.com/golang/net就对应是 https://go ...

  10. Goland debug失败

    在使用goland使用debug调试代码出现 API server listening at: 127.0.0.1:56871could not launch process: debugserver ...