Unity DOTS技术(十二) SystemBase修饰及操作


在这里插入图片描述

一.变量修饰容器

在上节中我们讲到多线程操作,为避免对线程的操作导致数据错乱,我们需要为变量进行修饰.于是我们需要用到Native Container.
1.Native Container包含了
在这里插入图片描述

1.NativeArray : 类似于数组
2.NativeHashmap : 类似于字典
3.NativeMultiHashMap : 类似于哈希表
4.NativeQueue : 类似队列

二 . Native Container 分配器

用说决定容器存在的帧数,有利于性能的优化.
在这里插入图片描述

1.Temp : 生命周期最短 速度最快 适合在一帧内使用
2.JobTemp : 生命周期和速度 中等 适合在四帧内使用
3.Persistent : 生命周期最长 速度慢 适合长久使用

三.NativeArray的创建及释放

1.在多线程中我们不能直接使用Int等类型,需要使用Native Container的内容,如上图我们使用了Native Container下的NativeArray的内容
2.使用后必须对变量进行卸载,timeInt的类型是TempJob周期为4帧,我们可以使用WithDeallocateOnJobCompletion自动的在线程运行后进行卸载
在这里插入图片描述

四.线程阻塞释放容器

关于释放我们还可以使用CompleteDependency来阻塞线程
在这里插入图片描述

五.只读容器

使用WithReadOnly可以修饰变量为只读

在这里插入图片描述

六,安全检查开关

当你在确保线程安全的情况下,可手动调用关闭线程安全检查,限制减少后性能会更高.
在这里插入图片描述

七.实体操作

下面介绍在SystemBase中的ForEach遍历实体进行操控.对实体操作只能在主线程进行
在这里插入图片描述

1.在Foreach中我们需要传入实体Entity
2.通过EntityManager对实体进行操作
3.实体只能在主线程操作于是我们需要添加WithoutBurst()以及Run();
4.需要添加WithStructuralChanges才能正常行动

八.更优的实体操作方式

推荐使用以下例子效率更高
在这里插入图片描述

1.定义EntityCommandBuffer
2.调用Playback执行
3.Dispose清理

Unity DOTS(DOTS: Data-Oriented Technology Stack)是Unity的一种数据导向技术堆栈,它旨在提高游戏性能和可扩展性。它基于实体组件系统(Entity-Component-System,ECS)的概念,其中游戏对象被拆分为实体(Entity)和组件(Component),并通过系统(System)进行处理。 在Unity DOTS中,可以使用实体组件系统来管理和处理游戏对象。通过将游戏对象转换为实体和组件的形式,可以实现高效的数据处理和并行计算。例如,在创建实体时,可以使用GameObjectConversionUtility.ConvertGameObjectHierarchy函数将GameObject转换为Entity,并使用IConvertGameObjectToEntity接口进行自定义转换。然后,可以使用系统(System)对实体和组件进行处理,例如旋转方块事件。 Unity DOTS的优势包括更高的性能,更好的可扩展性和更方便的并行计算。通过采用数据导向的设计,可以减少内存访问和数据处理的开销,从而提高游戏的帧率和响应性。 总而言之,Unity DOTS是一种数据导向的技术堆栈,通过实体组件系统和并行计算来提高游戏性能和可扩展性。它可以通过转换游戏对象为实体和组件的形式,并使用系统进行处理来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [UnityDots技术入门](https://blog.csdn.net/m0_37920739/article/details/108181541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Unity DOTS简明教程](https://blog.csdn.net/mango9126/article/details/105219215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值