Underword

地底世界
专注挖洞不填坑
  1. 首页
  2. 游戏
  3. Unity
  4. 正文

Unity ECS - Entity的父子关系 (实现类似传统模式GameObject的transform.parent)

2020年9月2日 97点热度 0人点赞 0条评论

用代码实现动态添加或删除两个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函数中

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: ECS Unity
最后更新:2020年11月20日

Kami

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

LPLaser

带二学生

最新 热点 随机
最新 热点 随机
Numpy中矩阵的切片方法 让Selenium基于Edge执行自动化测试 cookie2json - 将cookie字符串转为Json的便捷工具 Python格式化字符常量 - 更酷的格式化字符串 SpaceSniffer - 了解你的磁盘空间构成 UltraRAMDisk - 虚拟光驱和内存盘创建软件
Python格式化字符常量 - 更酷的格式化字符串cookie2json - 将cookie字符串转为Json的便捷工具让Selenium基于Edge执行自动化测试Numpy中矩阵的切片方法
神州数码交换机DCS-3950忘记特权密码解决方案 常用Python语句 - 创建文件夹 AppData文件夹的区别 箱庭铁道物语-去除广告+修改硬币教程 Cisco - 关于基于IPsec的Site To Site VPN 的搭建 Numpy中矩阵的切片方法
分类目录
  • Alpine
  • C#
  • CentOS
  • Cisco
  • Docker
  • Gradle
  • PHP
  • Podman
  • Python
  • Unity
  • Windows
  • 博客
  • 建模
  • 开发
  • 杂项
  • 比赛
  • 游戏分享
  • 游戏破解
  • 软件分享
标签聚合
Gradle python ECS Windows Unity Docker typecho 游戏破解

COPYRIGHT © 2020 Underword. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

沪ICP备2020032896号-1