目录

Unity DOTS1.0(9) Struct Change

Struct Change

概念:

  • 一些引发了unity重新排列chunk内存,改变了chunk数据内容的一些操作,叫做structural changes。
  • 这个操作消耗很大,并且只能在主线程里面运行。所以了解清楚很重要

导致Struct Change的操作:

1. 创建一个Entity

  • 当你创建一个entity的时候,unity找一个已存在的chunk上给分配一块可以使用的内存给ComponentData;如果不存在空闲的chunk了,就会创建一块新的chunk来给entity作为ComponentData内存块(ArchType)来使用。

2. 销毁一个Entity

  • 当一个entity被删除的时候,它在chunk里面的内存也会空出来。因为连续遍历enity的时候,不能有空档。所以Unity就把最后一个entity的数据,拷贝到刚才空出来的内存块,然后把最后的那一个空出来用于下一次entity的创建。
    • 如果这个chunk,没有任何一个entity了,那么这个时候chunk的16Kib内存,就会被释放,还给系统;

3. 添加或者删除组件

  • 当一个entity执行添加或者删除组件后,它的ArchType就变化了,这时候就需要把这个entity迁移到和它一样ArchType的Chunk中。
    • 这个迁移是进行了一次拷贝
    • 最后再删除原来entity在chunk中的内存块。

当产生Struct Change时, 如何处理:

1.同步点Sync Point

  • 请求一个Sync Point,这是一个程序执行点,它会等待所有的被调度的job thread执行完成以后,再继续执行依赖entity数据的job thread。
  • 在等待的这段时间内,其它的工作线程的调度将会变得不可用,直到structural changes完成;
  • 而且所有相关组件的引用都失效
  • 所以需要要尽可能减少Unity进行sync point这种操作, 而struct change是sync point导致这个操作的主要原因。

2.如何避免Sync Point

  • 避免马上就去做struct change,而是把它放到一个队列里面一起做,本帧结束以后一起做;
  • 当在一个job里面想做一个struct change,可以把这个请求通过command buffer请求出来,等待在main thread里面统一处理;
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
晴空了无痕6 小时前
群体智能避障革命:RVO算法在Unity中的深度实践与优化
算法·unity·游戏引擎
EQ-雪梨蛋花汤10 小时前
【UnityEditor扩展】如何在 Unity 中创建棱柱体(用作VR安全区检测),同时在编辑器插件中实现与撤销/恢复功能
unity·编辑器·vr
虾球xz11 小时前
游戏引擎学习第204天
前端·学习·游戏引擎
BuHuaX11 小时前
C#的反射机制
服务器·unity·c#·游戏引擎·游戏程序
虾球xz11 小时前
游戏引擎学习第202天
学习·游戏引擎
虾球xz12 小时前
游戏引擎学习第207天
c++·学习·游戏引擎
不吃斋的和尚14 小时前
Unity HDRP管线用ShaderGraph还原Lit,方便做拓展;
unity·游戏引擎
虾球xz1 天前
游戏引擎学习第208天
学习·游戏引擎
benben0441 天前
Unity3D仿星露谷物语开发34之单击Drop项目
游戏·ui·unity·游戏引擎
妙为1 天前
unreal engine5开发仿鬼泣5的游戏,把敌人击飞到空中4连击
游戏·游戏引擎·虚幻·仿鬼泣5·空中连击