Unity ECS学习(10)

本文介绍了UnityECS中IJobChunk的概念,它是以chunk为执行单位,用于在处理大量相同类型数据时提高内存效率。作者详细讲解了如何声明和使用UpdateTranslationFromVelocityJob结构体,展示了如何在ECS系统中调度和执行IJobChunk以迭代处理Entity组件数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IJobEntity后是IJobChunk

IJobChunk

要了解IJobChunk首先我们得先了解下Chunk以及ECS的内存管理机制

Chunk

chunk就是最小内存块,IJobChunk的执行单位就是chunk,而ECS机制会根据每个entity下的componet的不同,定义成多个不同的archetype,比如EntityA 下有ComponentA,定义为ArchetypeA,
EntityB 下有ComponentB,定义为ArchetypeB, EntityC 下A有ComponentA 和 ComponentB, 定义为ArchetypeC, 如果有个 新的 EntityD 下有ComponentB ,那么就会归到 ArchetypeB下。然后,每个Archetype会分配一到多个chunk用来存储数据,这样的好处是,在处理多个相同类型的数据时候,他们命中的都是同一个的chunk,减少内存的读取和释放频率。上面也说了IJobChunk是以chunk为执行单位的,这和IJobEntity这种以Entity为单位做操作的相对更加节省内存的读取和释放频率。

IJobChunk使用

在DOTS中迭代处理Entity的组件数据先找到对应符合条件的ArcheType,然后再找到ArcheType对应的所有的Chunks,再遍历每个Chunk里面的每个Entity的组件数据。有了这个思路以后,我们先来看下如何来使用IJobChunk机制来进行数据迭代。
首先声明一个
这里的Execute和JobEntity类似都是必须声明的,不同的是参数不同。

public struct UpdateTranslationFromVelocityJob : IJobChunk
    {
   
        public ComponentTypeHandle<VelocityVector> VelocityTypeHandle;
        public ComponentTypeHandle<ObjectPosition> PositionTypeHandle;
        public float DeltaTime;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值