Unity DOTS技术(九) BufferElement动态缓冲区组件

文章目录


一.简介

在之前的学习中我们发现Entity不能挂载相同的组件的.
当我们需要用相同的组件时则可以使用.IBufferElementData接口
动态缓冲区组件来实现

在这里插入图片描述

二.例子

1.创建IBufferElementData组件
在这里插入图片描述

using Unity.Entities;
using UnityEngine;
//[GenerateAuthoringComponent]
public struct BufferComponent8 : IBufferElementData
{
    public int dataA;
    public int dataB;
}

2.创建管理组件
在这里插入图片描述

using Unity.Entities;
using UnityEngine;
public class Authoring8 : MonoBehaviour, IConvertGameObjectToEntity
{
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        DynamicBuffer<BufferComponent8> tempBuffer = dstManager.AddBuffer<BufferComponent8>(entity);
        tempBuffer.Add(new BufferComponent8() { dataA = 1, dataB = 100 });
        tempBuffer.Add(new BufferComponent8() { dataA = 2, dataB = 101 });
        tempBuffer.Add(new BufferComponent8() { dataA = 3, dataB = 102 });
    }
}

3.在场景中管理组件
在这里插入图片描述

4.运行后看到多个相同组件挂到了同一个实体
在这里插入图片描述

5.查询组件值
在这里插入图片描述

using Unity.Collections;
using Unity.Entities;
using UnityEngine;
public class Test8 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        EntityQuery tempEntityQuery = World.DefaultGameObjectInjectionWorld.EntityManager.CreateEntityQuery(typeof(BufferComponent8));
        NativeArray<Entity> tempEntites1 = tempEntityQuery.ToEntityArray(Allocator.TempJob);
        DynamicBuffer<BufferComponent8> tempBuffer = World.DefaultGameObjectInjectionWorld.EntityManager.GetBuffer<BufferComponent8>(tempEntites1[0]);
        Debug.Log(tempBuffer[0].dataA);
        tempEntites1.Dispose();
    }
}

6.编译组件
在这里插入图片描述

foreach (var item in tempBuffer)
{
    Debug.Log(item.dataA);
}

7.插入组件
在这里插入图片描述

tempBuffer.Insert(0, new BufferComponent8() { dataA = 999, dataB = 878 });

相关推荐

  1. UnityDOTS备忘

    2024-06-08 00:36:03       26 阅读
  2. vim的缓冲区管理技能

    2024-06-08 00:36:03       32 阅读
  3. 知识笔记(六十)———缓冲区溢出攻击

    2024-06-08 00:36:03       56 阅读
  4. vue 动态组件、异步组件

    2024-06-08 00:36:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 00:36:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 00:36:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 00:36:03       82 阅读
  4. Python语言-面向对象

    2024-06-08 00:36:03       91 阅读

热门阅读

  1. 常见的api:Runtime Object

    2024-06-08 00:36:03       29 阅读
  2. MySQL查看和修改时区

    2024-06-08 00:36:03       26 阅读
  3. Spring的bean的生命周期

    2024-06-08 00:36:03       24 阅读
  4. C++中的智能指针

    2024-06-08 00:36:03       31 阅读
  5. LIMS系统在汽车第三方检测实验室的应用

    2024-06-08 00:36:03       35 阅读
  6. Pytorch常用函数用法归纳:创建tensor张量

    2024-06-08 00:36:03       30 阅读
  7. Pytorch中Tensor的类型对应表

    2024-06-08 00:36:03       27 阅读
  8. 油封包装的关键注意事项

    2024-06-08 00:36:03       30 阅读
  9. 行列视(RCV)系统由哪几部分组成?

    2024-06-08 00:36:03       25 阅读
  10. Log4j日志级别介绍

    2024-06-08 00:36:03       27 阅读