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())//点击鼠标左键执行以下操作
{
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等)的更多相关文章
- 关于Unity的两种调试方法
Unity的两种调试方法 1.Debug.Log()输出语句调试,平时经常用这个 2.把MonoDevelop和Unity进行连接后断点调试 先把编辑器选择为MonoDevelop,Edit----& ...
- Android中定时执行任务的3种实现方法
在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runn ...
- Android中定时器的3种实现方法
原文:http://blog.csdn.net/wulianghuan/article/details/8507221 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与 ...
- 【转】Android中定时器的3种实现方法
原文网址:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的s ...
- 在Android开发中,定时器一般有以下3种实现方法
在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...
- 在Android开发中,定时执行任务的3种实现方法
在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...
- [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式
本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
- 深入理解javascript选择器API系列第三篇——h5新增的3种selector方法
× 目录 [1]方法 [2]非实时 [3]缺陷 前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuer ...
随机推荐
- Opencv模块
参考博客:https://blog.csdn.net/u012679707/article/details/79505279
- 多核 CPU 和多个 CPU 有何区别?
原文来自:http://www.solves.com.cn/it/yj/CPU/2019-06-24/1122.html 多核CPU和多CPU的区别主要在于性能和成本.多核CPU性能最好,但成本最高: ...
- Java实现定时器的四种方式
package com.wxltsoft.tool; import org.junit.Test; import java.util.Calendar; import ja ...
- 一些 乱码 GPU的问题
# # s = '网站地图' 原始 # s1 = s.encode('utf-8') # print(s1.decode('gbk')) #res 缃戠珯鍦板浘 # s = '缃戠珯鍦板浘' 原始 # ...
- 【Python】如何处理Excel中的数据
我们平时在做自动化测试的时候,可能会涉及到从表格中去读取或者存储数据,我们除了可以使用openpyxl来操作excel,当然也可以利用pandas来完成,这篇随笔只是我在学习过程中的简单记录,其他的功 ...
- centos平台搭建Oracle11g数据库+远程连接
经过了几天的摸爬滚打,终于成功的能在宿主机上(window10上的Plsql)去成功的连上虚拟机上的centos数据库 下面将自己的经验分享给大家: 具体的centos7.centos6上安装Orac ...
- HL7解析器
最近做了关于医疗的项目,用了HL7协议,以下是解析的代码: HL7解析器: using System; using System.Text; using System.Xml; using Syste ...
- scp--linux命令
不同服务器之间传输文件, 第一种方式: scp TC_20171230_RCE_15_37_34_build-20.tar.gz test@192.168.18.90://data/build/ 缺点 ...
- 吴裕雄 python 人工智能——基于Mask_RCNN目标检测(3)
import os import sys import random import math import re import time import numpy as np import cv2 i ...
- 学习笔记(23)- plato-准备中文语料
以plato使用的metalwoz数据集的INSURANCE为例,进行语料的汉化过程. 1. 下载数据集 微软的数据集,下载地址:https://www.microsoft.com/en-us/res ...