您当前的位置: 首页 >  unity

Peter_Gao_

暂无认证

  • 2浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity中的SendMessage方法

Peter_Gao_ 发布时间:2022-04-14 15:25:38 ,浏览量:2

 本质就是调用那个GameObject里面的Script里面的函数,可以跨语言的,例如Javascript可以调用C#的函数。 如果GameObject本身有两个脚本,例如“Move1.c#”和“Move2.js”,两个脚本内有同名函数例如“DoMove()”,会两个函数都执行一次。

方法名:需要接收消息gameobject挂载脚本上的方法名,无视访问权限, 能够调用private的方法 。

参数:object类型,单值,多值传数组,同理接收方参数列表页应为数组。 //参数注意事项:就算没有对应参数列表的方法,还是会调用同名的方法,所以SendMessage不是寻找函数签名,只是寻找函数名提示信息为枚举类型:  

SendMessage还有两个同类型方法 BroadcastMessage,SendMessageUpwards。 用法相同只是作用范围不同

BroadcastMessage自身脚本以及子物体挂载的脚本。 SendMessageUpwards自身脚本以及父物体挂载的脚本。

一、功能:用于向某个GameObject发送一条信息,让它完成特定功能。

1、执行GameObject自身的Script中“函数名”的函数 SendMessage ("函数名",参数,SendMessageOptions) 

2、执行自身和子节点GamgeObject的Script中“函数名”的函数 BroadcastMessage ("函数名",参数,SendMessageOptions) 

3、自身和父节点GamgeObject的Script中“函数名”的函数 SendMessageUpwards ("函数名",参数,SendMessageOptions)    二、SendMessageOptions参数:

 

提示信息可以省略不写,默认为RequireReceiver。

1、如果没有脚本接收,没有找到相应函数,会报错(默认是这个状态), 抛出异常 SendMessageOptions.RequireReceiver 

2、即使没有找到相应函数,也不会报错,自动忽略 SendMessageOptions.DontRequireReceiver 

SendMessage系列用起来都比较简单,但是效率低下(见https://www.cnblogs.com/chenliyang/p/6558680.html)所以基本很少看到有人用。对于各种架构类型SendMessage基本都比不上委托等用法,对于一些中小型不需要考虑性能的程序可以考虑使用(作为一个小型的MVC事件收发),在此不做深入研究,总体上食之无味弃之不可惜,建议小伙伴们不要使用。

缺点如下(参考https://www.cnblogs.com/FudgeBear/p/10367495.html):   过于依赖反射机制(reflection)来查找消息对应的被调用函数   1. 频繁使用反射会影响性能   2. 更会大大增加代码的维护成本 -- 字符串标识对应方法   3. 无视访问权限, 能够调用private的方法 -- 若有一个是有方法在声明的类中没有被使用,那正常情况下都会把它认为是废代码从而删除,这时隐患就出现了

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0394s