Unity3D中的SendMessage使用(消息传递的三种方法)
概述
Unity提供的消息推送机制可以非常方便我们的脚本开发,它实现的是一种伪监听者模式,利用的是反射机制。
常用函数
关于消息推送,常用的函数有三个:”SendMessage“、”SendMessageUpwards“、”BroadcastMessage“。这些函数都是GameObject或者Component的成员函数,只要得到一个对象,然后调用它的这三个函数就可以进行一个消息的推送。也就是说比如获得一个物体对象,然后调用gameObject.SendMessage(functionA...),这个方法就会遍历自身的所有组件,只要一个组件中有函数functionA,那么functionA就会被调用,并且同时传递参数。
1.SendMessage
原型:
public void SendMessage(
string methodName,
object value = null,
SendMessageOptions options = SendMessageOptions.RequireReceiver
);
作用:调用一个对象的methodName函数,这个函数可以是公有的也可以是私有的,后面跟一个可选参数(此参数作为传入参数),最后面跟一个可选的设置参数(它有两个选项,后面再讲)。
2.SendMessageUpwards
原型:
public void SendMessageUpwards(
string methodName,
object value = null,
SendMessageOptions options = SendMessageOptions.RequireReceiver
);
作用:它的作用和SendMessage类似,只不过它不仅会向当前对象推送一个消息,也会向这个对象的父对象推送这个消息(记住,是会遍历所有父对象)。
3.BroadcastMessage
原型:
public void BroadcastMessage(
string methodName,
object parameter = null,
SendMessageOptions options = SendMessageOptions.RequireReceiver
);
作用:这个函数的作用和SendMessageUpwards的作用正好相反,它不是推送消息给父对象,而是推送消息给所有的子对象,当然,也是会遍历所有的子对象。
第三个参数使用:
SendMessageOptions.RequireReceiver //如果没有找到相应函数,会报错(默认是这个状态)
SendMessageOptions.DontRequireReceiver //即使没有找到相应函数,也不会报错,自动忽略
gameObject.SendMessage
这个函数的目的就是为了调用其他脚本中的函数,也就是交互目的.
他会在指定的gameobject上所依附的脚本中针对函数名"string"去检索. 找到后调用并传送参数object
发送多个参数:
首先创建一个接受信息的脚本,并赋给一个物体Obj,
public class DJH_String : MonoBehaviour {
void PrintMessage(object[] obj)
{
Debug.Log(obj[0]+""+obj[1]);
}
}
接下来,来传递信息,代码如下:
public class DJH_SendMessage : MonoBehaviour {
private string msgValue1 = "Val1";
private string msgValue2 = "Val2";
public GameObject obj;
void Start () {
object[] message = new object[2];
message[0] = msgValue1;
message[1] = msgValue2;
obj.SendMessage("PrintMessage", message, SendMessageOptions.DontRequireReceiver);
}
}
作者:完美风暴互动开发工作室
链接:https://www.jianshu.com/p/d314dc7c7777
来源:简书
Unity3D中的SendMessage使用(消息传递的三种方法)的更多相关文章
- (转)在网页中JS函数自动执行常用三种方法
原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 在网页中JS函数自动执行常用三种方法
在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT LANGUAGE="JavaScript"> function ...
- 在JS方法中返回多个值的三种方法
在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title> ...
- 在JS方法中返回多个值的三种方法(转载)
来源:https://www.cnblogs.com/gxsyj/p/6004574.html 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数 ...
- VBS中解决路径带空格的三种方法
vbs中,如果需要运行的程序中带有空格,按照通常的方式往往会提示错误,其实有两种形式不同的解决方法: 在应用程序前后分别加三个双引号,代码如下: Set wshell=CreateObject(&qu ...
- Vsphere中ESXi主机ssh开启的三种方法
ESXi 5.5是直接安装在物理主机上的一个虚拟机系统,本质上是一个Linux系统. 平时可以通过VMware Client端或者VMware vCenter进行管理,但对于一些特殊的VMware命令 ...
- JS判断一个数组中是否有重复值的三种方法
方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...
- Android中XML解析,保存的三种方法
简单介绍 在Android开发中,关于XML解析有三种方式,各自是: SAX 基于事件的解析器.解析速度快.占用内存少.非常适合在Android移动设备中使用. DOM 在内存中以树形结构存放,因此检 ...
随机推荐
- js实现计时 时分秒
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 程序包管理工具yum
yum 首先要有一个网络上或本地或远程的yum仓库.然后需要yum安装程序的机器去yum仓库下载yum元数据(包括包信息和依赖信息)到本地的cache里.当需要安装程序的时候,会查看yum源数据里是否 ...
- JavaScript面向对象OOM 2(JavaScript 创建对象的工厂模式和构造函数模式)
在创建对象的时候,使用对象字面量和 new Object() 构造函数的方式创建一个对象是最简单最方便的方式.但是凡是处于初级阶段的事物都会不可避免的存在一个问题,没有普适性,意思就是说我要为世界 ...
- Python 异常处理Ⅳ
异常的参数 一个异常可以带上参数,可作为输出的异常信息参数. 你可以通过except语句来捕获异常的参数,如下所示: 变量接收的异常值通常包含在异常的语句中.在元组的表单中变量可以接收一个或者多个值. ...
- C# 父子窗体 传值
子窗体 public event Action<List<DataGridViewRow>> myEvent; myEvent(List); 子窗体调用 父窗体 创建对象 fr ...
- C# 获取 与 修改 web.config中的值(修改Xml文件)
定义web.config 中 appSettings 节点 <appSettings> <add key="domainExist" value="fa ...
- 数据库范式以及ER图
数据库范式包括第一.第二.第三以及BCNF范式,关于范式的探讨,博主在知乎上看见了一篇很不错的文章,分享文中,这边就不再做阐述.地址:https://www.zhihu.com/question/24 ...
- ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
docker-compose 的问题 要改环境变量 xed ~/.profile export COMPOSE_HTTP_TIMEOUT=500 export DOCKER_CLIENT_TIMEOU ...
- websocket协议解决消息发送问题 Could not decode a text frame as UTF-8.
在使用websocket 时出现了Could not decode a text frame as UTF-8 首次连接成功当发送消息时,出现了编码作错误 第一请求页面时,连接成功 当发送消息时,不加 ...
- Tomcat 激活spring profile
springboot打包war部署到外部tomcat的时候指定profile启动 windows 在%tomcat%/bin下创建setenv.bat文件 linux 在%tomcat%/bin下创建 ...