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

概述

Unity提供的消息推送机制能够很是方便咱们的脚本开发,它实现的是一种伪监听者模式,利用的是反射机制。函数

经常使用函数

关于消息推送,经常使用的函数有三个:”SendMessage“、”SendMessageUpwards“、”BroadcastMessage“。这些函数都是GameObject或者Component的成员函数,只要获得一个对象,而后调用它的这三个函数就能够进行一个消息的推送。也就是说好比得到一个物体对象,而后调用gameObject.SendMessage(functionA...),这个方法就会遍历自身的全部组件,只要一个组件中有函数functionA,那么functionA就会被调用,而且同时传递参数。ui

1.SendMessage

原型:spa

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

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

2.SendMessageUpwards

原型:code

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"去检索. 找到后调用并传送参数objectstring

发送多个参数:

首先建立一个接受信息的脚本,并赋给一个物体Obj,it

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来源:简书

相关文章
相关标签/搜索