搜索

23

主题

82

帖子

455

积分

超级版主

Rank: 8Rank: 8

积分
455
发表于 2019-3-21 22:03:34 404 浏览 1 回复

【收集讨论】IEvent接口, Handle方法相关

本帖最后由 天蝎 于 2019-6-21 13:37 编辑

【码奴】天气不错(519730356) 11:27:37
【码奴】天气不错(519730356) 11:27:49
请问这种写法会不会产生 GC
【码奴】天气不错(519730356) 11:31:50
public abstractclass AEvent : IEvent
public abstractclass AEvent<A, B>: IEvent
public abstractclass AEvent<A, B, C>: IEvent
为什么要分别实现这么多抽象类呢
【码仙】熊猫就一写代码的懂个屁ET
反正就是会GC
【码仙】熊猫就一写代码的懂个屁ET
支持多参数吧
【码农】⊙
让你多几个参数选择
【码奴】天气不错
为什么不用
可变参数
【码圣】一念永恆
可变参数,逻辑会在一个函数内
【码圣】一念永恆
多个t,逻辑可以分开
【码仙】熊猫就一写代码的懂个屁ET
你泛型怎么可变参数。。。。
【码奴】天气不错
我的意思是既然范型不能避免装箱拆箱,何不用 可变参数

【码仙】大空忆
@天气不错IL和正常些mono是有一些区别的。
【码奴】天气不错
主要区别在哪,我该怎么注意一下呢
【码仙】大空忆
就是il不能用继承
【码仙】大空忆
不能用一些比较骚的操作
【码奴】天气不错
可变参数 不算骚吧
【码圣】一念永恆
装箱拆箱,跟强转有啥区别啊。。。。
【码仙】大空忆
@天气不错 我不清楚 ,太骚了IL虚拟机不认识就会报错
【码奴】天气不错
我们项目里用的 ilrt, 事件系统 用的可变参数,现在怎样避免装箱操作
【码圣】一念永恆
【码圣】一念永恆
我不是很明白啊
【码圣】一念永恆
这个玩意
【码圣】一念永恆
不是可以直接Handle(T a,B b,C c )吗
【码圣】一念永恆
为啥要object
【码奴】天气不错
我也是不太明白这里
【码仙】熊猫就一写代码的懂个屁ET(1304085906) 11:48:11
:IEvent
【码仙】熊猫就一写代码的懂个屁ET(1304085906) 11:48:18
因为接口里就是object。。。
【码仙】大空忆(535421993) 11:48:43
因为弄成类可以使用c#特性,在程式启动时收集相关的注册事件并创建对应的事件对象。如果handle的话只能有一个事件对象。
【码圣】一念永恆(1518750975) 11:49:12
这个不是事件吗。。。。
【码圣】一念永恆(1518750975) 11:49:28
我这样用。。。。。。
【码圣】一念永恆(1518750975) 11:56:28
mono 自身也有很多T 1 T 2 T 3 T 4 这样的
【码仙】底层拼图仔 AE(210379417) 11:56:37
不过这样转3个obj传参数感觉是有点问题。。
【码仙】底层拼图仔 AE(210379417) 11:58:50
如果传3个值类型,装箱拆箱,导致gc是必然的
【码神】秃头鼓励师<xiajunjiegg@qq.com> 12:00:11
现在的事件转成 IEvent 调用的双击查看原图
【码奴】天气不错(519730356) 12:00:23
@AE 改一下,pull request 一下?
【码神】秃头鼓励师<xiajunjiegg@qq.com> 12:00:34
IEvent的参数就是 object
【码仙】熊猫就一写代码的懂个屁ET(1304085906) 12:00:53
@AE 改一下,pull request 一下?
【码奴】天气不错(519730356) 12:01:00
是啊,我觉得 IEvent 是不是也可以改一下?
【码圣】一念永恆(1518750975) 12:01:06
如果不用ievent的话,直接用委托不就好了
【码仙】底层拼图仔 AE(210379417) 12:02:08
委托也是类,没区别。参数这里没明白猫大为什么这么设计
【码仙】深圳-unity-ks(1227114700) 12:02:30
我也有疑惑
【码仙】笑览世界(1090268920) 12:02:46
为了可以传任何东西
【码仙】深圳-unity-ks(1227114700) 12:02:57
好像是为了传到热更层?
【码仙】底层拼图仔 AE(210379417) 12:03:39
热更层的事件系统是独立的(客户端)
【码仙】深圳-unity-ks(1227114700) 12:04:17
好像要用一个代理类转过去的,我太久没看了,都忘了
【码神】秃头鼓励师<xiajunjiegg@qq.com> 12:05:13
热更的事件要注册到 model层里
【码神】秃头鼓励师<xiajunjiegg@qq.com> 12:05:45
//hotfix的事件也要注册到mono层,hotfix可以订阅mono层的事件
Action<List<object>>action = list => { Handle(iEvent, list); };
ETModel.Game.EventSystem.RegisterEvent(aEventAttribute.Type,new EventProxy(action));
【码仙】底层拼图仔 AE(210379417) 12:11:14
【码仙】底层拼图仔 AE(210379417) 12:11:20
改成这样呢
【码仙】底层拼图仔 AE(210379417) 12:12:01
这样就没了装箱拆箱的问题但我感觉没这么简单.
【码奴】天气不错(519730356) 12:12:43
我也感觉没这么简单
【码神】Ray<wrylray@qq.com> 12:12:50
看似增加复杂度的设计,熊猫一般来说都是为了解决某种问题的
【码神】Ray<wrylray@qq.com> 12:12:55
所以问问
【码仙】底层拼图仔 AE(210379417) 12:14:09
比如A事件,三个参数是int string string. B事件可以是float,long,string这样.
【码仙】底层拼图仔 AE(210379417) 12:14:21
双击查看原图不过我感觉应该不是为了这个目的....
【码仙】底层拼图仔 AE(210379417) 12:14:27
完全没必要吧.
【码奴】天气不错(519730356) 12:16:42
不过我觉得 ,不考虑解决拆箱装箱的问题,用这种方式 比用可变参数要 好一些。虽然框架的代码好像是多了一些,但是每个event 类不用去  强转类型了,写起来要舒服一些
【码仙】底层拼图仔 AE(210379417) 12:17:32
【码仙】底层拼图仔 AE(210379417) 12:17:43
Awake这边,猫大的写法就符合认知了...
【码仙】底层拼图仔 AE(210379417) 12:17:52
好奇怪.
【码仙】底层拼图仔 AE(210379417) 12:19:17
这里红圈,o一般必定是一个Component,所以这么写不会有问题.
【码仙】底层拼图仔 AE(210379417) 12:19:26
但上面事件的参数那里不一样啊.
【码仙】底层拼图仔 AE(210379417) 12:20:14
万一谁在Update里,触发个有多个值类型参数的事件, 这不就是每帧GC么.....
【码仙】底层拼图仔 AE(210379417) 12:20:36
不对,应该说每帧装箱拆箱...
【码奴】天气不错(519730356) 12:22:40
嗯,要问问群主
【码仙】笑览世界(1090268920) 12:22:57
没事,这个能承受
【码仙】笑览世界(1090268920) 12:23:22
不然怎么玩?这是最方便的操作
【码仙】底层拼图仔 AE
@熊猫-招聘前后端,有意请@  猫大,关于框架里,IEvent调用有个疑惑.
如果事件的三个参数都是值类型,这个事件恰巧又是在Update每帧触发的. 那么在传参的过程中必定会导致装箱拆箱吧.
这个是故意这么设计的么,是为了什么呢?
【码仙】底层拼图仔 AE
额,和Update无关...我主要是想表达一下如果是Update里,那就是每帧都装箱拆箱了...
【码仙】底层拼图仔 AE
@笑览世界 这里这样写就可以避免装箱拆箱了.




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
申明:  所有搜集讨论中的聊天记录, 昵称前面的标注【码*】 仅代表QQ群聊活跃等级. 不代表其他意思.
回复

使用道具 举报

23

主题

82

帖子

455

积分

超级版主

Rank: 8Rank: 8

积分
455
 楼主| 发表于 2019-6-21 13:38:03
【码神】烟雨迷离半世殇(1778139321) 12:28:28
可能是为了迎合热更层事件注册?
【码仙】笑览世界(1090268920) 12:30:30
应该是避免反复单独注册
【码仙】笑览世界(1090268920) 12:30:47
ilr对泛型不友好
【码神】烟雨迷离半世殇(1778139321) 12:31:21
是挺容易报非法泛型的错误
【码仙】笑览世界(1090268920) 12:31:22
所有转成object,能避免大量注册
【码仙】底层拼图仔 AE(210379417) 12:31:28
但服务器也是以这套事件系统为基础的.
【码仙】笑览世界(1090268920) 12:31:39
泛型很容易出问题
【码仙】笑览世界(1090268920) 12:32:06
应该说支持不得,ilr泛型都得转成实际的类
【码神】Ray<wrylray@qq.com> 12:34:29
有很多为了热更妥协的设计。比如取配置
【码神】烟雨迷离半世殇(1778139321) 12:35:33
@AE 确实,那可能就是忘了改,或者懒得单独在弄一个双击查看原图?
【码仙】笑览世界(1090268920) 12:35:49
为了服务器客户的通用
【群主】熊猫-招聘前后端,有意请@(80081771) 12:37:35
因为事件支持hotfix订阅mono层事件,mono层要传参数到il层,泛型是没办法传的,避免装箱拆箱可以用个component包一下,抛完后disponse这个传参组件就行了
【码奴】天气不错(519730356) 12:40:01
@AE  猫大来了
【码仙】深圳-unity-ks(1227114700) 12:41:15
说对了
【码仙】底层拼图仔 AE(210379417) 12:42:44
那只能传参都尽量传引用类型的东西了..
【码仙】笑览世界(1090268920) 12:43:11
别想太多
【码仙】笑览世界(1090268920) 12:43:16
一般够用了
【码仙】笑览世界(1090268920) 12:43:43
大部分游戏是达不到用完et性能的水平
【码仙】底层拼图仔 AE(210379417) 12:44:02
嗯. 一般偶尔触发一次的无所谓, 但Update里触发的应该要注意一下.
【码仙】笑览世界(1090268920) 12:44:06
我们游戏全部是拆装箱,一样跑
码神】秃头鼓励师<xiajunjiegg@qq.com> 12:44:10
双击查看原图真实啊
【码仙】笑览世界(1090268920) 12:44:15
就是帧率有点坑
【码仙】底层拼图仔 AE(210379417) 12:44:17
双击查看原图或者那种频繁触发的.
【码奴】天气不错(519730356) 12:44:18
用完性能是一种什么样的体验,卡死吗
【码仙】笑览世界(1090268920) 12:44:21
一不注意就掉了
【码仙】笑览世界(1090268920) 12:44:52
事件系统全是是object,来得快啊
【群主】熊猫-招聘前后端,有意请@(80081771) 12:46:35
update哪里有装箱
【码仙】深圳-unity-ks(1227114700) 12:46:53
他们说update中频繁触发事件
【码仙】深圳-unity-ks(1227114700) 12:47:05
然后那个object会有装箱拆箱的操作
【码仙】底层拼图仔 AE(210379417) 12:47:10
@熊猫-招聘前后端,有意请@ 我是指 Update里频繁调用,传参 三个值类型的,
【码仙】笑览世界(1090268920) 12:47:11
帧率20帧以下就算,得写成啥样才能掉到20
【码仙】底层拼图仔 AE(210379417) 12:49:41
或者其他什么频繁触发事件的地方, 类似于这样的地方,应该就是尽量传引用类型,或者就像猫大说的,拿个什么东西,如Component的来包装下.
【码仙】底层拼图仔 AE(210379417) 12:50:31
这个包装的东西 可以做个池什么的.  如果是Component的话,猫大已经写好了池的机制.双击查看原图
【码神】Ray<wrylray@qq.com> 12:55:00
update如果有参数频繁拆装也可以放awake嘛







申明:  所有搜集讨论中的聊天记录, 昵称前面的标注【码*】 仅代表QQ群聊活跃等级. 不代表其他意思.
回复

使用道具 举报

返回列表
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

团队

ET社区

官方客服

QQ:754394098

讨论QQ群:

474643097(1群)

253518148(2群)

快速回复 返回顶部 返回列表