文章目录
一.共享组件
如下图目前所有的组件都是继承于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.使用以下代码进行对比
可以看出修改值后的组件则非相同组件,不修改则为相同组件