用代码实现动态添加或删除两个Entity的父子关系
引入
今天在学习ECS的时候想实现父物体带着子物体移动的效果
然而我的物体都是代码生成,不自带父子()
外网上好像也找不到类似的解决方法
或者是我没找到) 但我能想到的解决方法只有操作矩阵或者父子关系了
矩阵讲道理有点麻烦,数学没到家,所以简单的找了一下
来源
具体的代码在
Unity.Transforms.ParentSystem
里
我写的比较烂,看不懂可以去看看源码,逻辑蛮简单的
正片
前提
两个Entity:
EChild
和 EParent
添加父子关系
向EChild添加Parent
,LocalToWorld
,LocalToParent
三个Component
然后确保EChild不包含PreviousParent
var em = World.DefaultGameObjectInjectionWorld.EntityManager;
em.AddComponentData(EChild, new Parent {Value = EParent});
em.AddComponentData(EChild, new LocalToParent());
em.AddComponentData(EChild, new LocalToWorld());
执行之后EChild会在Parent
中自动绑定EParent
EParent会在Child
中自动绑定EChild
具体代码在
ParentSystem
的OnCreate
函数中
m_NewParentsGroup
为条件
移除父子关系
确保EChild存在PreviousParent
且不存在Parent
只要移除Parent
,LocalToParent
即可
会自动将EParent的child
自动删除
具体代码在
ParentSystem
的OnCreate
函数中
m_RemovedParentsGroup
为条件
更换父子关系
应该是更换EChild的Parent
指向的Entity
关于更换了解的不是很清晰,可以自查源码
具体代码在ParentSystem
的UpdateChangeParents
函数中
文章评论