[请益] unity中delegate event的使用时机?

楼主: knife5566 (爱心疖瘤‧刀)   2018-11-12 13:29:28
C#中delegate event是一种写法,有的人喜欢有的人不喜欢,但大体来说
知不知道有这东西存在是某些人评定会不会C#的标准。
在unity中也使用了delegate event这东西,在一些人的网志上表示用event才不会
让程式有“坏味道”(不知道这指啥)
用起来大概是这种感觉:
假设我今天有一段专门处理UI的按钮的class
public class UI : MonoBehaviour
{
public delegate void UI_trigger(string just_a_string);
public static event UI_trigger my_UI_trigger;
public void button(string just_a_string) //按下按钮的时候call这行
{
my_UI_trigger(just_a_string);
}
}
这样我的button这个function就只要里面有my_UI_trigger(_objects);这行就好,至于
哪个程式要来接这段程式就不是这个class要考虑的事,就好像当兵的时候连长在集合场
乱叫,连长本身不care哪个确切的谁要来理自己乱叫,但一定要有兵仔回应就是。
如果有程式要来回应按钮按下去时,大概是这样写
public units : MonoBehaviour
{
void OnEnable()
{
UI.my_UI_trigger += units_trigger(string just_a_string);
}
void units_trigger(string just_a_string) //UI的button被call时跑到这行
{
Print("新兵"+transform.gameObject.name+"接收到"+just_a_string);
}
}
但实际上在写的时候呢,除了UI以外,通常游戏中建立event的物件可能是不特定的多
数,而接收event的物件也是不特定的多数,最后就变成N个event的头配上M个event的尾,
最后还得写code来确认到底是这个event是谁发来的要传给谁,好像有点本末倒置了。写
是可以写但是感觉没像人家说得那么的漂亮。
所以这东西到底实际上要怎么用。
作者: wix3000 (痒,好吃)   2018-11-12 16:48:00
我都用Action 几百年没手动宣告delegate了event大部分的使用状况还是去帮程式定义出几个关键的时间点,例如当数值发生改变、当某件事完成时等等。这点在游戏中也不例外,例如当回合切换时,当角色攻击时,当返回本阵时等等还有我很认真的告诉你,C#的变量请用驼峰命名,然后类别首字要大写
作者: cjcat2266 (CJ Cat)   2018-11-12 17:22:00
推楼上,虽然说命名这件事是看个人喜好,但C#是微软自己维护更新的语言,VS的IntelliSense和C#外挂的某些功能还是直接内定驼峰命名法,跟着用方便多多。不过我是只有public field/property才用大头驼峰法啦,protected或private还是用自己C++习惯的m_/s_/g_/k开头驼峰命名法也就是其他人会看到的interface命名法遵照微软建议另外回归正题,event其实只是个工具,我认为用自己或团队认为合理的工具对症下药就好,不必拘泥于用或不用特定工具
作者: jerryklu (鲁凯)   2018-11-12 23:11:00
unreal也会侦测驼峰命名在编辑器中显示会自动多空格
作者: breakself (A3)   2018-11-17 01:05:00
Event可以拿来断耦合,例如在MVC架构中可以用Event传出去,减少不同Class交互Reference的状况
作者: wulouise (在线上!=在电脑前)   2018-11-17 22:18:00
最后一段,我觉得问题是这个event不明确,或是资料不足原po可以举一个具体的例子来提问,比较能厘清你的疑问如果不了解bad smell是什么,可以google design pattern有点想不太到什么情况是不该收event却收了还要不做事
作者: cjcat2266 (CJ Cat)   2018-11-18 09:25:00
那些都可以成为客制event的参数
作者: wulouise (在线上!=在电脑前)   2018-11-18 13:16:00
delegate可以自订变量,你只要把从哪来,去哪里标明就没问题了设计上应该是所有取得道具event给ui supervisorui supervisor决定要更新到那,不会有混淆的问题出现

Links booklink

Contact Us: admin [ a t ] ucptt.com