一.变量修饰容器
在上节中我们讲到多线程操作,为避免对线程的操作导致数据错乱,我们需要为变量进行修饰.于是我们需要用到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清理