当前位置: 首页 > article >正文

【Unity3D】ECS入门学习(七)缓存区组件 IBufferElementData

组件继承于IBufferElementData,可以让一个实体拥有多个相同的组件。

using Unity.Entities;

public struct MyBuffComponentData : IBufferElementData
{
    public int num;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
public class BuffComponentConvert : MonoBehaviour, IConvertGameObjectToEntity
{
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        DynamicBuffer<MyBuffComponentData> bufferList = dstManager.AddBuffer<MyBuffComponentData>(entity);
        bufferList.Add(new MyBuffComponentData() { num = 1 });
        bufferList.Add(new MyBuffComponentData() { num = 2 });
    }
}

使用AddBuffer<组件类>(entity)添加缓存区组件,返回的是一个动态缓存区对象<组件类> 
然后逐个创建和添加到动态缓存区对象里去就完成了对实体添加多个相同组件。

继承于Monobeahviour.cs脚本直接Start方法执行如下代码:

正常通过query的方式查询获取组件的实体数组,我们只有1个所以直接取array[0]实体对象,
使用EntityManager对象GetBuffer<组件类>(array[0])获取动态缓存区对象,它是一个列表,可以分别对它进行索引获取值输出,插入,遍历等操作。

//(7)缓存区组件
EntityManager entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
EntityQuery query = entityManager.CreateEntityQuery(typeof(MyBuffComponentData));
NativeArray<Entity> array = query.ToEntityArray(Allocator.TempJob);
DynamicBuffer<MyBuffComponentData> bufferList = entityManager.GetBuffer<MyBuffComponentData>(array[0]);
Debug.Log(bufferList[0].num);

//末尾插入        
bufferList.Insert(bufferList.Length, new MyBuffComponentData() { num = 3 });
Debug.Log(bufferList[2].num);

//首部插入
bufferList.Insert(0, new MyBuffComponentData() { num = 4 });

//遍历组件
foreach (var v in bufferList)
{
    Debug.Log(v.num);
}

//销毁查询对象和数组        
query.Dispose();
array.Dispose();

 


http://www.kler.cn/a/459790.html

相关文章:

  • CMake配置区分Debug和Release模式
  • Windows系统提示ffmpeg.dll丢失怎么解决?
  • 【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密
  • 2024/12/29 黄冈师范学院计算机学院网络工程《路由期末复习作业一》
  • 第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)
  • 手机更换屏幕后,会被防控软件识别为模拟器!!
  • “AI智能安全管理系统:让安全无处不在
  • QTday5
  • 数据结构与算法Python版 图的应用与广度优先搜索
  • SQL 实战:日期与时间函数 – 统计数据的时间跨度与趋势
  • CSS系列(45)-- Scope详解
  • 谷歌浏览器的网页安全检测功能
  • Flutter快速动态生成APP启动图标logo的便捷方式
  • 代码随想录Day56 108. 冗余连接,109. 冗余连接II。
  • 自学记录HarmonyOS Next的HMS AI API 13:语音合成与语音识别
  • C语言控制台AI五子棋
  • IP组播基础
  • Kubernetes 的资源管理方式(二)
  • Ubuntu网络配置(桥接模式, nat模式, host主机模式)
  • 医疗数仓Hive安装部署
  • Spring cloud GateWay入门
  • 江科大学习笔记之——标准库以及其HAL库LED流水灯
  • Docker--Bitnami/kibana
  • 检索分析服务 Elasticsearch版
  • 搭建android开发环境 android studio
  • 闲谭Scala(3)--使用IDEA开发Scala