Unity DOTS技术(七)共享组件


在这里插入图片描述

一.共享组件

如下图目前所有的组件都是继承于IComponentData接口,但其实中部分实体其实在不同的实体中重复使用,
为了性能更优化,于是我们可以将其使用IShaderComponentData组件将其共享处来.
在这里插入图片描述

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

二.举例说明

1.创建脚本

创建脚本继承IShadreComponentData 注意是Struct结构
在这里插入图片描述

2.继承

创建代理继承Mono和IConvertGameObjectToEntity接口,并在其中添加组件
需要注意的是:共享组件需要使用AddShareComponentData进行添加
在这里插入图片描述

3.挂载

在场景中创建物体并挂载以下两个组件
在这里插入图片描述

4.查看结果

运行后发现,挂载成功
在这里插入图片描述

二.修改

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

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

三.删除

World.DefaultGameObjectInjectionWorld.EntityManager.RemoveComponent<ShareComponent6>(tempEntitis[0]);

四.查找

ShareComponent6 tempShareComponent6 = World.DefaultGameObjectInjectionWorld.EntityManager.GetSharedComponentData<ShareComponent6>(tempEntitis[0]);

五.必须实现接口IEquatable

1.在场景中再复制一个带组件的GameObject
在这里插入图片描述

2.编写以下代码
在这里插入图片描述

3.使用以下代码进行对比
在这里插入图片描述

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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小盖子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值