此篇开始研究实际应用到项目或个人Demo中。参考国外CodeMonkey的RTS包含一些基础API应用。
前言
游戏不必100%使用Dots完全实现。因为面向组件开发一个功能复杂度和调试都比面向对象要更难。对于某些模块,比如UI,事件管理系统,网络等,使用传统对象模式来实现更有效率。只有核心逻辑需要大量单位同屏运行或者很复杂的算法模型可采用Dots进行。比如RTS同时10000个单位同时移动。Unity对于托管和非托管的System有二种类型,托管是SystemBase非托管是ISystem。
Component
根据前面的介绍,Component里只能定义值类型,不能定义引用类型。如果像下图这么定义,到编辑器里编译就会报错。
可定义范围
那问题来了,除了如下图这种简单的类型外。我其他的什么都没法用了吗?
测试使用其他的值类型数据定义
Authoring时直接报错。所以没有Component不能定义复杂类型的数据。
常用的UnityComponent
1.LocalTransform:对应控制位置,旋转。
但这里没法单独设置某一个方向的Scale,还需要添加另一个组件。
NonUniformScale:使entity具备可以在某个轴上的缩放
Component上多了个这个组件
实际上了解图形学这块改的是这里的矩阵换算
2.MaterialMeshInfo对应Mesh组件对应
更换Mesh代码示例:
需要先注册Mesh
对应System里面替换。
更换Material和Mesh一样,需要注册拿id替换。
3.LinkedEntityGroup
动态生成的entity会自动添加link,这个用来控制当整个entity销毁时,也可以把孩子节点的Component也进行删除避免报错。
一些鬼畜错误
在一个authoring上给别的GameObject添加组件时
Reimport场景会报错,且组件并没有正确添加进去,并且报错信息指向的内容让人一头雾水。