转载自 Unity3D中的SendMessage使用(消息传递的三种方法)

0 概述

Unity提供的消息推送机制可以非常方便我们的脚本开发,它实现的是一种 伪监听者模式,利用的是反射机制。

1 常用函数

关于消息推送.
常用的函数有三个:

  • SendMessage
  • SendMessageUpwards
  • BroadcastMessage

这些函数都是GameObject或者Component的成员函数
只要得到一个对象,然后调用它的这三个函数就可以进行一个消息的推送。

1.1 SendMessage

原型:

public void SendMessage(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver
);

作用:

  • 调用一个对象的methodName函数,
  • 这个函数可以是公有的也可以是私有的,
  • 后面跟一个可选参数(此参数作为传入参数),最后面跟一个 可选的设置参数(它有两个选项,后面再讲)。

1.2 SendMessageUpwards

原型:

public void SendMessageUpwards(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver
);

作用:

  • 它的作用和SendMessage类似
  • 只不过它不仅会向当前对象推送一个消息
  • 也会向这个对象的父对象推送这个消息(记住, 会遍历所有父对象 )。

1.3 BroadcastMessage

原型:

public void BroadcastMessage(string methodName, object parameter = null,SendMessageOptions options = SendMessageOptions.RequireReceiver
);

作用:

  • 这个函数的作用和SendMessageUpwards的作用正好相反,
  • 它不是推送消息给父对象,而是推送消息给 所有的子对象,当然,也是会遍历所有的子对象。

1. 4 第三个参数的使用

SendMessageOptions.RequireReceiver //如果没有找到相应函数,会报错(默认是这个状态)
SendMessageOptions.DontRequireReceiver //即使没有找到相应函数,也不会报错,自动忽略

2 gameObject.SendMessage

这个函数的目的就是 为了调用其他脚本中的函数
就是交互目的.

  • 会在指定的 gameobject 上所依附的脚本中针对函数名 string 去检索.
  • 找到后调用并传送参数 object

2.1 发送多个参数:

首先创建一个接受信息的脚本,并赋给一个物体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);  }
}

Unity3D中的SendMessage使用(消息传递的三种方法)相关推荐

  1. 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...

  2. 在HTML中使用CSS美化网页的三种方法

    在HTML中使用CSS美化网页的三种方法 CSS是Cascading Style Sheets(级联样式表)的缩写,CSS是一种样式表语言,用于为HTML文档定义布局.例如,CSS涉及字体.颜色.边距 ...

  3. js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法

    本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...

  4. ABAP中创建动态内表的三种方法(转载)

    BAP中创建动态内表的三种方法 第一种: 如果我们需要的动态内表字段或者动态工作区和数据字典中的类型一致,可以直接使用CREATE DATA生成,当然也可以是自定义类型. 比如要产生和数据表MARA结 ...

  5. android启动其他app的服务器,Android中通过外部程序启动App的三种方法

    这篇文章主要介绍了Android中通过外部程序启动App的三种方法, 本文讲解了直接通过包名. 通过自定义的Action. 通过Scheme三种方法,并分别给出操作代码,需要的朋友可以参考下 ==== ...

  6. vbs执行ctrl+空格_VBS中解决路径带空格的三种方法

    vbs中,如果需要运行的程序中带有空格,按照通常的方式往往会提示错误,其实有两种形式不同的解决方法: 在应用程序前后分别加三个双引号,代码如下: Set wshell=CreateObject(&qu ...

  7. html网页自动运行函数,在网页中JS函数自动执行常用三种方法

    在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: functionn MyAutoRun() { //以下是您的函数的代码,请自行修改先! alert("函数 ...

  8. android 每隔2秒执行_Android中实现延迟执行操作的三种方法

    今天在敲代码的过程中,有个需求是延迟执行某方法. 整理收集了三种方法,自己用的是第三种. 第一种线程休眠:new Thread() { @Override public void run() { su ...

  9. Java中用三种方法输出字符串_java中两个字符串连接的三种方法

    java中两个字符串连接有以下三种方法: 第一种方法:使用+: 第二种方法:使用concat(): 第三种方法:使用append(): 如下代码: public class Practice { // ...

最新文章

  1. 紧跟大佬的步伐:关于我亲自动手复现了恺明新作MAE这件事
  2. python中的time库安装步骤-Python time库基本操作方法
  3. 学习笔记92—python 画横竖分界线
  4. spss回归分析_回归分析中的简单斜率检验:用SPSS或jamovi实现
  5. Alibaba数学竞赛试题与答案汇总(持续更新中)
  6. 挪车+php,还在苦苦寻找占你车位的人?关注这个微信号实现“一键挪车”
  7. Python 线程信号量 semaphore - Python零基础入门教程
  8. 一般最小二乘法 c语言,最小二乘法C语言的实现(7页)-原创力文档
  9. 25. PE结构-PE详解之资源
  10. 08.为什么要使用lombok,它解决了什么问题?
  11. iOS开发小技巧 -- tableView-section圆角边框解决方案
  12. python 类可以调用实例变量_Python实例方法、类方法、静态方法区别详解
  13. 烟台职业学院计算机,烟台职业学院首届计算机应用技能决赛落幕
  14. C语言PAT乙级试题答案1016
  15. C/C++面试宝典2022版(最新版)
  16. 数据仓库模型数据仓库四大模型
  17. SAP固定资产模块的表
  18. 如何能在面试的头5分钟内让HR喜欢你
  19. cae属于计算机技术吗,CAE、CAD、CAPP与CAM的区别——扫盲贴
  20. ArcGIS教程——ArcGIS快速入门

热门文章

  1. 数理统计和概率论的区别
  2. SQL Sever 2019 安装教程
  3. 性能优化之matrix学习-IO Canary,安卓面试题2019
  4. 聊一聊关于微前端架构的几种技术选型(转载,侵权必删)
  5. STM32控制ULN2003驱动步进电机28BYJ-48
  6. 合宙首款MCU芯片——Air101上市
  7. HTML 模仿百度首页 (html+css)
  8. CD-CompactDisk
  9. Teleport 简易堡垒机系统
  10. 交互设计师 mysql_UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论...