【UnityDOTS 七】IAspect的使用

news/2025/1/12 21:52:32/

IAspect的使用

前言

IAspect是Unity DOTS中用来更方便组织数据集合的接口。可以将我们需要的数据集合放到一个IAspect中,然后用这个自定义的IAspect去进行查询。


一、IAspect是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
如上面官方文档说的,是一个高级的Component组合体。
可以从工程查看Unity帮我们生成的Aspect代码看到,它的实现原理。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 先建立对Aspect中的数据的ComponentLookUp(这一点在IJobChunk使用中一样的)
  • 生成迭代器去迭代对应的ArcheType中的Chunk
  • 从Chunk中获取对应的Component的NativeArray
  • 然后遍历这个NativeArray就能获取到对应的数据

二、IAspect能包含什么数据

在这里插入图片描述

  • Entity,某个实体的引用
  • RefRw,RefRO,对某些Component的Ref引用,可以添加Optional这个属性标签,让这个属性变成可选的
  • EnabledRefRW,EnabledRefRo,对EnableComponent的引用
  • DynamicBuffer,组件类型为DynamicBuffer的
  • SharedComponent,只读的ShareComponent
  • 嵌套其他IAspect
    Aspect不仅能组织各类Component数据,还能嵌套使用,这样对数据的使用提供了更多的组织形式,更加方便去编写相关代码。

三、怎么使用

许多查询接口都提供了单独IAspect为参数的同名方法。
比如:SystemAPI的Query接口
在这里插入图片描述
在IJobEntity中的Excute方法:
在这里插入图片描述
使用其他也很简单,就是传入一个你想要的Aspect类型参数即可。

Aspect类中也可以写入一些方法,方便直接以Aspect数据为目标集合,进行模块化的处理。

实例代码如下:

readonly partial struct RotateAspect : IAspect{readonly RefRW<LocalTransform> localTransform;readonly RefRO<RotateSpeed> speed;public void Rotate(float deltaTime){localTransform.ValueRW = localTransform.ValueRO.RotateY(speed.ValueRO.rotateSpeed * deltaTime);}}

因为Aspect是高级的封装,Unity会利用SourceGen帮助我们生成辅助代码,所以需要是Partial类,在类定义的readOnly字段是Unity的写法要求,不代表不能修改RefRW数据,里面成员变量的readOnly也不代表真的是readonly。真正的读写权限需要RefRW,RefRO关键字来表示。


http://www.ppmy.cn/news/809481.html

相关文章

交换机远程登录telnet、SSH、禁止非法用户访问实验

交换机远程登录实验 交换机远程登录实验一、配置Console口登录设备二、配置Telnet远程登录三、Stelnet&#xff08;SSH&#xff09;配置四、远程登录实际中的配置五、禁止非法用户远程登录 交换机远程登录实验 ———————————————————————————————…

数字逻辑设计

数字逻辑设计 第零周 数字系统存储、转移、处理的对象是信息。信息->参数&#xff0c;绝大多数物理参数是连续的&#xff0c;而人类社会中的参数往往是离散的。模拟信号-物理信号的一种表现形式。

计算机逻辑推理

1&#xff1a;判断与或条件顺序执行的结果是否为真 举例&#xff1a; A||B&&C&&D||E||B&A||F 简单逻辑推理即&#xff1a;倒着推用简单公式即可满足 如果是或条件满足即在执行&#xff0c;如果是与条件不满足就不执行,否则判断上一个条件&#xff0c;直到条…

交互设计思维-逻辑思维

交互设计全称“Interaction Design,缩写IXD”&#xff0c;是指参与产品与它的使用者之间的互动机制进行分析、定义、规划、描述和探索的过程&#xff0c;交互指的是产品与它的使用者之间的互动过程而交互设计师则是秉承以用户为中心的设计理念&#xff0c;以用户体验度为原则&a…

推理的逻辑基础

谓词公式的永真性 如果谓词公式P&#xff0c;对个体域D上的任何一个解释都取得真值T&#xff0c;则称P在D上是永真的。如果P在每个非空个体域上均永真&#xff0c;则称P永真。 如果谓词公式P&#xff0c;对于个体域D上所有解释都取得假值F&#xff0c;则称P在D上是永假的。如果…

(五)逻辑架构

逻辑架构 1. 逻辑架构剖析1.1 服务器处理客户端请求1.2、 Connectors1.3、第1层&#xff1a;连接层1.4、第2层&#xff1a;服务层1.5、第3层&#xff1a;引擎层1.6、存储层1.7、小结 2、SQL执行流程2.1 MySQL 中的 SQL执行流程MySQL的查询流程1、查询缓存2.解析器3.优化器4. 执…

逻辑运算详解

逻辑与运算规则 进行逻辑与运算的两位都是逻辑1&#xff0c;则结果是1&#xff1b;否则&#xff0c;结果是0。 0 与 0 00 与 1 01 与 0 01 与 1 1 运算示例&#xff1a; 0100 0101 A 0011 0001 B 0000 0001 A 与 B 逻辑或运算规则 进行逻辑或运算的两位都是逻辑0&…

逻辑思路

请求一个方法&#xff0c;可能成功&#xff0c;可能失败。若失败&#xff0c;最多自动请求三次&#xff0c;若仍为失败&#xff0c;则结束。 function Random() {return num parseInt(Math.random()*10); } function Request(count 1) {let num Random();if(num % 2 0){co…