09 2021 档案
摘要:使用实体批处理作业 在系统内实现IJobEntityBatch或IJobEntityBatchWithIndex以批量迭代您的数据。 当您在系统的OnUpdate函数中调度IJobEntityBatch作业时,系统会使用您传递给调度函数的实体查询来识别应传递给作业的块。该作业为这些块中的每一批实体调
阅读全文
摘要:使用 Job.WithCode SystemBase类提供的Job.WithCode构造是一种将函数作为单个后台作业运行的简单方法。您还可以在主线程上运行Job.WithCode并仍然利用Burst编译来加速执行。 以下示例使用一个Job.WithCode lambda 函数用随机数填充本机数组,并
阅读全文
摘要:使用 Entity.ForEach 使用SystemBase类提供的Entities.ForEach构造作为在实体及其组件上定义和执行算法的简洁方法。Entities.ForEach执行您在实体查询选择的所有实体上定义的 lambda 函数。 要执行作业 lambda 函数,您可以使用Schedul
阅读全文
摘要:系统 系统,ECS中的S,提供了从其当前状态的分量数据变换到其下一个状态的逻辑-例如,一个系统可能更新所有移动实体可以通过速度自上次更新乘以所述时间间隔的位置. 实例化系统 Unity ECS 会自动发现项目中的系统类并在运行时实例化它们。它将每个发现的系统添加到默认系统组之一。您可以使用系统属性来
阅读全文
摘要:使用块组件将数据与特定块相关联。 块组件包含适用于特定块中所有实体的数据。例如,如果您有表示按邻近度组织的 3D 对象的实体块,您可以使用块组件为它们存储一个集合边界框。块组件使用接口类型IComponentData。 添加和设置块组件的值 尽管块组件可以具有对单个块唯一的值,但它们仍然是块中实体原
阅读全文
摘要:动态缓冲组件 使用动态缓冲区组件将类数组数据与实体相关联。动态缓冲区是 ECS 组件,可以容纳可变数量的元素,并根据需要自动调整大小。 要创建动态缓冲区,首先声明一个实现IBufferElementData并定义存储在缓冲区中的元素的结构。例如,您可以将以下结构用于存储整数的缓冲区组件: publi
阅读全文
摘要:您可以使用SystemStateComponentData来跟踪系统内部的资源,并根据需要创建和销毁这些资源,而无需依赖单个回调。 SystemStateComponentData和SystemStateSharedComponentData类似于ComponentData和SharedCompon
阅读全文
摘要:共享组件是一种特殊的数据组件,您可以使用它根据共享组件中的特定值(除了它们的原型之外)细分实体。当您向实体添加共享组件时,EntityManager 会将具有相同共享数据值的所有实体放入同一块中。 共享组件允许您的系统一起处理类似的实体。例如,作为Rendering.RenderMeshHybrid
阅读全文
摘要:序幕 请注意,混合组件与Project Tiny不兼容。 目的 Unity 的许多现有功能还没有 DOTS 等价物(目前)。因此,在许多情况下,DOTS 项目将是混合的:经典游戏对象和 ECS 的混合。 混合组件提供了一种从 ECS 代码方便地访问 UnityEngine 组件的方法。它们最初旨在处
阅读全文
摘要:ECS 组件(不是托管UnityEngine.Component类的实例)是一个结构体,它只包含实体的实例数据。ECS 组件不应包含实用程序以外的方法来访问结构中的数据。您应该在系统中实现所有游戏逻辑和行为。就面向对象的 Unity 系统而言,这类似于 Component 类,但只包含变量。 Uni
阅读全文
摘要:组件是实体组件系统架构的三个主要元素之一。它们代表您的游戏或应用程序的数据。实体是索引您的组件集合的标识符,而 [系统] 提供行为。 ECS 中的组件是具有以下“标记接口”之一的结构: IComponentData — 用于通用和 [块组件]。 IBufferElementData — 将 [动态缓
阅读全文
摘要:世界 一个世界组织实体为孤立的群体。一个世界同时拥有一个EntityManager和一组Systems。在一个世界中创建的实体仅在该世界中有意义,但可以转移到其他世界(使用EntityManager.MoveEntitiesFrom)。系统只能访问同一世界中的实体。您可以创建任意数量的世界。 默认情
阅读全文
摘要:要读取或写入数据,首先必须找到要更改的数据。ECS 中的数据存储在组件中,ECS 根据它们所属实体的原型在内存中将这些组件组合在一起。您可以使用EntityQuery获取 ECS 数据的视图,其中仅包含给定算法或流程所需的特定数据。 您可以使用EntityQuery执行以下操作: 运行作业以处理选定
阅读全文
摘要:访问实体数据 迭代数据是您在实施 ECS 系统时需要执行的最常见任务之一。ECS 系统通常处理一组实体,从一个或多个组件读取数据,执行计算,然后将结果写入另一个组件。 迭代实体和组件的最有效方法是在按顺序处理组件的可并行化作业中。这利用了所有可用内核和数据局部性的处理能力来避免 CPU 缓存未命中。
阅读全文
摘要:实体 实体是实体组件系统架构的三个主要元素之一。它们代表您的游戏或应用程序中的单个“事物”。一个实体既没有行为也没有数据;相反,它标识哪些数据属于一起。系统提供行为,组件存储数据。 实体本质上是一个 ID。最简单的方法是将其视为一个默认情况下甚至没有名称的轻量级GameObject。实体 ID 稳定
阅读全文
摘要:ECS概念 实体组件系统 (ECS) 架构将身份(实体)、数据(组件)和行为(系统)分开。该架构专注于数据。系统读取组件数据流,然后将数据从输入状态转换为输出状态,然后实体对其进行索引。 下图说明了这三个基本部分如何协同工作: 在此图中,系统读取Translation和Rotation组件,将它们相
阅读全文
摘要:DOTS 项目设置 与创建经典 Unity 项目相比,DOTS 项目需要一些额外的步骤。 安装包 笔记 在以下所有步骤中,检查每个包的文档以确定哪些版本的 Unity 与该包兼容。 从 Unity 2020.1 开始,即使启用了预览包,也不会在包管理器中列出 DOTS 包。安装这些软件包有两种替代选
阅读全文
摘要:在Unity 2019.3中,轻量级渲染管线LWRP正式升级为通用渲染管线Universal Render Pipeline。 轻量级渲染管线LWRP设计的目标是具有快捷、可扩展的优点,可为所有移动设备带来高质量的图形效果。轻量级渲染管线LWRP可用于正式制作流程,在过去的一年中,我们不断为其增添功
阅读全文