Unity DOTS技术(七)共享组件

文章目录


一.共享组件

如下图目前所有的组件都是继承于IComponentData接口,但其实中部分实体其实在不同的实体中重复使用,

为了性能更优化,于是我们可以将其使用IShaderComponentData组件将其共享处来.

共享组件的使用需要注意尽量选择不会经常变动的组件,当共享组件值发生修改时会使用实体被移动到新的Chunk中造成性能消耗.

尽量作为"只读组件"使用.滥用装造成更大的性能消耗.

二.举例说明

1.创建脚本

创建脚本继承IShadreComponentData 注意是Struct结构

2.继承

创建代理继承Mono和IConvertGameObjectToEntity接口,并在其中添加组件

需要注意的是:共享组件需要使用AddShareComponentData进行添加

3.挂载

在场景中创建物体并挂载以下两个组件

4.查看结果

运行后发现,挂载成功

二.修改

当值修改后相当于创建了一个新的共享组件

csharp 复制代码
NativeArray<Entity> tempEntitis = World.DefaultGameObjectInjectionWorld.EntityManager.GetAllEntities();
World.DefaultGameObjectInjectionWorld.EntityManager.SetSharedComponentData(tempEntitis[0], new ShareComponent6() { data = 10 });

三.删除

csharp 复制代码
World.DefaultGameObjectInjectionWorld.EntityManager.RemoveComponent<ShareComponent6>(tempEntitis[0]);

四.查找

csharp 复制代码
ShareComponent6 tempShareComponent6 = World.DefaultGameObjectInjectionWorld.EntityManager.GetSharedComponentData<ShareComponent6>(tempEntitis[0]);

五.必须实现接口IEquatable

1.在场景中再复制一个带组件的GameObject

2.编写以下代码

3.使用以下代码进行对比

可以看出修改值后的组件则非相同组件,不修改则为相同组件

相关推荐
小盖子5 个月前
Unity DOTS技术(十二) SystemBase修饰及操作
unity dots·unitydots·dots技术·systembase·dots systembase