找回密码
 立即注册
查看: 667|回复: 0

[笔记] Unity2019.3 DOTS代码简化笔记

[复制链接]
发表于 2020-12-2 13:03 | 显示全部楼层 |阅读模式
跳转至专题目录
专题推荐文章:


    localPosition与anchoredPosition转化 unity Scene View扩展之编辑器扩展总结Unity获取鼠标点击ui GameObject
本系列目录

    DotsSample笔记 Unity2019.3 DOTS代码简化笔记 ECSSamples的Boids鱼群例子笔记
一、最新DOTS更新大幅减少了所需要的写的样板代码

    [GenerateAuthoringComponent]属性替换自定义创建组件Entities.ForEach()替换IJobForEach和IJobForEachWithEntity构造
我们以下面这么一个例子,来介绍一下,现在DOTS是怎么完成瘦身的。
这是2019.3之前一个让物体运动的ECS代码
这是一段让物体移动的ECS代码


以前的代码,分成下面3步
1、创建一个Component
2、创建一个MonoBehaviour,继承IConvertGameObjectToEntity接口,使持有这个Component的GameObject,转换成一个持有Velocity IComponentData的Entity。
3、为了让持有IComponentData的Entity动起来,需要创建一个管理这些组件的System
4、如果用到JobSystem,那么,就需要一个处理数据的Job
5、Job要真正运行起来,就需要在System中的Update中,用Schedule执行


经过上面一个例子发现,其实,只有这么两处代码,才是我们需要关心的,其他代码通通都是模板代码
现在,我们要开始瘦身了。
1、既然IConvertGameObjectToEntity这个接口,与IComponentData是冗余的,那么,就可以考虑去掉IConvertGameObjectToEntity,给IComponentData添加上一个属性,让Unity知道,这个IComponentData是可以被挂载到GameObject上的。
2、用Entities.ForEach来替换Job创建、执行的代码,简化Job相关代码。
不过,用lambuda表达式会带来GC,Unity官方下一步就是要优化掉这一部分的GC。即使如此,现在这么些,还是会很好地配合JobSystem和Burst Compiler高效地执行。
最后,我们比较一下,前后写代码DOTS代码所需要的工作量。
左边为Unity2019.3的,右边是以前版本的。
很明显,现在的工作量大大减少了。
再举个例子,下面这个PaddleInputData,挂上GenerateAuthoringComponent之后,就可以在Inspector里面添加对应的组建了,设置参数,也会修改到对应的Entity上了。[1]
参考


  • ^[天天直播] 运用DOTS还原经典游戏《Pong》(上)https://www.bilibili.com/video/BV1M7411t7Ai/?spm_id_from=333.788.videocard.0

本帖子中包含更多资源

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

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-23 12:12 , Processed in 0.157348 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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