【UnityDOTS 九】Entity Command Buffer使用

这篇具有很好参考价值的文章主要介绍了【UnityDOTS 九】Entity Command Buffer使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Entity Command Buffer使用

前言

直接的创建,销毁Entity,以及对Entity的结构进行更改(比如增加删除Component)都要通过EntityManager等接口来实现。
在Job中,只能实现对Entity的Component组件进行数据修改的功能。
我们对Entity的修改只能在主线程上进行。
在Job中需要通过Entity Command Buffer实现对Entity修改操作的记录;然后回到主线程进行统一操作。

一、Entity Command Buffer是什么?

【UnityDOTS 九】Entity Command Buffer使用,DOTS,unity,DOTS
在主线程上创建一个ECB对象,传递到Job中,然后在Job中进行对应的操作记录后,在主线程进行回放操作。
ECB可以看做类似在Job中使用的EntityManager,但是因为实际操作还是在主线程,所以有一定的规则进行约束。

二、Entity Command Buffer创建

ECB对象的创建,需要在Job中使用时,需要传入Allocator.TempJob,或Allocator.Persistent。因为它的生命周期不只是当前函数或者当前帧,是需要传入到Job中使用的。

EntityCommandBuffer ecb = new EntityCommandBuffer(Allocator.TempJob);

ECB如果要在多个并行的Job中使用,需要转换成ParalleWriter,再传入到Job中使用。
【UnityDOTS 九】Entity Command Buffer使用,DOTS,unity,DOTS

三、Entity Command Buffer使用

ECB的playBack方法需要在主线程调用(一般在System中),所以要保证使用ECB去记录修改的Job需要在调用playBack方法之前调用完毕。
在playBack之后,类似NativeArrary一样,需要手动去销毁。所以一般的使用流程:

  • 依赖的Job的handle上调用Complete让主线程等待完成
  • 调用ECB.PlayBack,去回放操作
  • 调用ECB.Dispose,去销毁ECB内存

利用JOB去创建Entity时,所以Job无法继承IJobEntity以及IJobChunk来实现。需要利用IJob,IJobFor,IJobParallelFor这些基础Job接口来实现多线程。

注意点:
1.在Job中使用ECB时,无法对创建出的临时Entity进行SetComponent操作,因为Job创建的Entity只是临时的,实际回放时,才会创建真正的Entity。只能给Entity进行AddComponent操作。需要用其他的System在创建完这些Entity的System之后,再来操作这些Entity的Component来实现设置数据。
2.也不能在ECB回放的主线程上,对拿到的Entity集合进行操作。
3.ParalleWriter在写入时为了保证回放的顺序,内部使用了EntityIndexInQuery
【UnityDOTS 九】Entity Command Buffer使用,DOTS,unity,DOTS
4.最好每个单独的JOB使用独立的ECB,避免出现各类问题。
5.ECB的PlayBack方法,最好只调用一次。多次调用可能会出问题,如果要多次调用可以参考PlaybackPolicy.MutiPlayback选项。

四、Entity Command Buffer System

可以自定义Entity Command Buffer System,来使用ECB,在这个System中创建的ECB放到Job中使用时,需要注意依赖问题,同时不需要手动Playback,以及手动dispse ECB。
DOTS中会默认创建一些ECB System来提供我们使用,一般情况,不需要自定义ECB System。
可以通过代码获取这些阶段的ECB来依赖这些默认ECBSystem的回放流程,完成我们的回放操作。比如BeginInitializationEntityCommandBufferSystem中的,它会在下一帧进行回放操作。这样我们就不需要自己去管理回放了。

总结

Entity Command Buffer主要用于在Job中创建,销毁Entity,对Entity的Component的增加,删除。但无法实现对创建的Entity来setComponent。文章来源地址https://www.toymoban.com/news/detail-523239.html

到了这里,关于【UnityDOTS 九】Entity Command Buffer使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity DOTS技术

    目录 一.概述 二.DOTS详解 1.开发环境搭建 2.简单ECS程序  2.调试功能 3.常用API  4.系统之间的互相干扰 5.实体Entity的创建查找删除 6.使用批处理Gpu Instancing优化性能 7.World,System,Group 1)World 2)System 3)Group 8.组件Component介绍 1)组件Component的添加修改删除 2)ShareComponent 3)状态

    2024年02月05日
    浏览(50)
  • Unity Dots学习内容记录

    DOTS未来的潜力还是挺多的,目前已经陆续有项目局部投入该技术,追求硬件到软件的极致性能。 主要是记录下学习unity dots技术的过程吧。 DOTS全称Data Oriented Tech Stack,面向数据的技术堆栈。 是由Unity的下面几个技术栈组成 1.Entities(ECS,Entity-Component Data-System) 2.JobSytem(多线程作

    2024年04月15日
    浏览(54)
  • Unity DOTS从原理到应用

    什么是DOTS? Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性。它使用C# Job System,Burst Compiler和Entity Component System(ECS)来组合和处理数据,让游戏运行更高效率。DOTS使开发人员可以使用最新技术来开发游戏,并在追求

    2024年02月11日
    浏览(43)
  • Unity DOTS1.0安装

    2023年6月10日更新: 2022.3 Entities1.0 manifest.json添加一句

    2024年02月15日
    浏览(37)
  • Unity 万人寻路(dots版本)

    时间:2023-7-29 北京下雨,公司停电,回家早了,更新一下。 寻路模块,还是前前后后,打磨了2个月,中间穿插着搞很多其他的功能,有些螺旋迭代的味道。 进入正题: 设计团队,会从游戏性角度考虑,提出很多需求。 1,单位之间的规避,模型不能穿插 2,建筑物规避,模

    2024年02月08日
    浏览(40)
  • Unity项目技术方案Dots架构方案简介

    DOTS全称是Data-Oriented Tech Stack,翻译过来就是多线程式数据导向型技术堆栈(DOTS),它由任务系统(Job System)、实体组件系统(ECS)、Burst Compiler编译器三部分组成。 ECS + JobSystem + BurstCompile = 高性能 + 多线程 +  编译层面优化 DOTS保证相同类型组件在内存中都是顺序排列,极大

    2023年04月09日
    浏览(46)
  • Unity DOTS Baking与Baker详解

    Unity DOTS Baking与Baker详解   最近DOTS终于发布了正式的版本, 我们来分享一下DOTS里面Baking 与Baker的关键概念,方便大家上手学习掌握Unity DOTS开发。   Unity DOTS开发模式,为了让大家在”创作”游戏的时候使用原来组件方式来编辑游戏场景与资源,同时Unity提供了一种Baking机制

    2024年04月17日
    浏览(38)
  • DOTS Unity.Physics物理引擎碰撞事件处理

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics 物理引擎的主要流程与P ipeline   Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来执行:   

    2024年01月18日
    浏览(51)
  • Unity DOTS物理引擎的核心分析与详解

    最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现, 包含了物理刚体的迭代计算与碰撞检测等查询。Unity.Phy

    2024年01月16日
    浏览(42)
  • Unity DOTS中的baking(四)blob assets

    blob assets表示不可变的二进制数据,在运行时也不会发生更改。由于blob assets是只读的,这意味着可以安全地并行访问它们。此外,blob assets仅限于使用非托管类型,这意味着它们与Burst编译器兼容。而且由于它们是非托管类型,序列化和反序列化的速度要比其他数据格式快得

    2024年04月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包