Unity DOTS1.0(8) Aspect核心机制分析

Aspect

概念:

  • ASPECT是一种用于描述Entity的特性或特征的概念。ASPECT通常用于在系统中筛选出具有特定组件集合的实体。 你可以把5~6个组件得引用保存到一个数据对象里面(Aspect),你通过Aspect就可以拿到这些组件得引用,从而访问这些组件数据;

  • Unity 会为关联的Components组,提供预定义好的aspects。你也可以通过IAspect接口定义自己的Aspect

  • Aspect 可以包含的字段类型:

    • Entity字段:存放EntityID
    • ComponentData的引用:RefRW与RefRO
    • EnabledRefRW与EnabledRefRO fields,可以包含Enbale Component的这个引用,可读写,或只读;
    • DynamicBuffer:这个是可以包含; IBufferElementData
    • lSharedComponent:类型的字段;读取共享的ComponentData;
    • Other aspect types: 也可以在你的Aspect里面引入其它的Aspect;

创建一个Aspect

  • 定义一个Aspect类型: readonly partial stuct 类名 : IAspet{}

  • 当你定义了好一个Aspect类以后,定义与entity对应组件的引用,再用Entity创建Aspect实例,这样当Aspect初始化好了,字段的里面就是Entity中的component数据的引用;

  • 实例:

using Unity.Entities;
readonly partial struct MyAspect : IAspect
{RefRW<transform> a;
}aspect = new Aspect(Enity);
Aspectt.a //这个就是Entity的Transfrom
  • 如果某个字段可以不用制定值: [Optional]来修饰这个字段; 那么这个字段就不是必须的;

  • Apsect就是开发某个代码逻辑的时候,需要entity里面的一些组件时,就定以一个Aspect,然后里面包含了这些引用。

  • 在System中可以通过SystemAPI.GetAspect 来获得一个Entity的Aspect实例:

MyAspect asp = SystemAPI.GetAspect<MyAspect>(myEntity);
  • 在System外,可使用EntityManager.GetAspect 获取
  • 迭代World Entity中某个特定的Aspect,使用SystemAPI.Query来查询

实例代码:

	struct CannonBall : IComponentData{public float3 Speed;}// Aspects must be declared as a readonly partial structreadonly partial struct CannonBallAspect : IAspect{// An Entity field in an Aspect gives access to the Entity itself.// This is required for registering commands in an EntityCommandBuffer for example.public readonly Entity Self;// Aspects can contain other aspects.// A RefRW field provides read write access to a component. If the aspect is taken as an "in"// parameter, the field behaves as if it was a RefRO and throws exceptions on write attempts.readonly RefRW<LocalTransform> Transform;readonly RefRW<CannonBall> CannonBall;// Properties like this aren't mandatory. The Transform field can be public instead.// But they improve readability by avoiding chains of "aspect.aspect.aspect.component.value.value".public float3 Position{get => Transform.ValueRO.Position;set => Transform.ValueRW.Position = value;}public float3 Speed{get => CannonBall.ValueRO.Speed;set => CannonBall.ValueRW.Speed = value;}}public partial struct MySystem : ISystem{public void OnUpdate(ref SystemState state){foreach (var cannonball in SystemAPI.Query<CannonBallAspect>()){// use cannonball aspect here}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.4.28力扣每日一题——负二进制转换

2024.4.28 题目来源我的题解方法一 进制转换方法二 模拟进位 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1017 我的题解 方法一 进制转换 对于以-2为基数的系统&#xff0c;可以这样理解&#xff1a;在-2进制中&#xff0c;每一位的权重是-2的幂。这与传统的二进制表…

assert函数详解

assert函数详解 1.函数概述2.assert函数一般用法3.assert函数的一些使用案例3.1判断大小3.2strlen函数的模拟实现3.3其它 4.注意 1.函数概述 评价一个表达式&#xff0c;当表达式错误时&#xff0c;输出一个诊断信息并且终止程序 assert是一个宏&#xff0c;在使用之前要调用库…

[Meachines][Hard]Napper

Main $ nmap -p- -sC -sV 10.10.11.240 --min-rate 1000 $ curl http://10.10.11.240 $ gobuster dir -u "https://app.napper.htb" -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt -k 博客 $ ffuf -c -w /usr/share/se…

使用LMDeploy部署和量化Llama 3模型

## 引言 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;正变得越来越重要&#xff0c;它们在各种自然语言处理任务中发挥着关键作用。Llama 3是近期发布的一款具有8B和70B参数量的模型&#xff0c;它在性能和效率方面都取得了显著的进步。为了简化Llama …

一文看懂Oozie面试题及参考答案

目录 描述Apache Oozie的主要功能和用途 解释Oozie在Hadoop生态系统中的作用 Oozie如何帮助管理和执行Hadoop作业

BUUCTF---misc---菜刀666

1、下载附件&#xff0c;在wireshark中分析 2、题目说是菜刀&#xff0c;联想到http协议的post方法 3、使用命令过滤 http.request.methodPOST 4、打开数据包&#xff0c;发现有个不一样 这里面有一大串的数据包 5、追踪http数据流&#xff0c;发现z2后面是一个jpg文件的文件…

中仕公考:哪些情况不能考公务员?

1.年龄不符合 主要分两类【一类是未成年人&#xff0c;另一类是超龄人员】 具体来讲:年龄一般为18周岁以上、35周岁以下 (2024国考标准是1987年10月至2005年10月期间出生&#xff09; 对于2024年应届硕士、博士研究生(非在职人员)放宽到40周岁以下(2024国考标准是1982年10月以后…

GitHub Desktop安装与使用教程

GitHub Desktop 是GitHub公司推出的一款桌面应用程序&#xff0c;旨在帮助开发人员更轻松使用GitHub。它提供了一个直观的用户界面&#xff0c;允许用户通过图形化界面来执行常见的 Git 操作&#xff0c;如克隆仓库、创建分支、提交更改、合并代码等。 GitHub Desktop 的设计使…

Spring - 7 ( 13000 字 Spring 入门级教程 )

一&#xff1a;Spring Boot 日志 1.1 日志概述 日志对我们来说并不陌生&#xff0c;我们可以通过打印日志来发现和定位问题, 或者根据日志来分析程序的运行过程&#xff0c;但随着项目的复杂度提升, 我们对日志的打印也有了更高的需求, 而不仅仅是定位排查问题 比如有时需要…

基于JSP的酒店客房管理系统(二)

目录 第二章 相关技术介绍 2.1 Jsp的简介 2.2 sql server 2005 的简介 第三章 系统的分析与设计 3.1 系统需求分析 1&#xff0e;理解需求 2&#xff0e;需求分析 3.2开发及运行环境 3.3功能模块的设计 3.3.1 设计目标 3.3.2 客房管理系统前台的设计 3.3.3 操作员管…

[QNX] mmap+cache/nocache+memcpy/asm_memcpy速度对比

mmap nocache介绍 以linux系统的nocache介绍&#xff1a; 在Linux系统中&#xff0c;使用mmap映射文件到内存时可以指定不使用缓存。这可以通过在调用mmap时将MAP_NOCACHE标志传递给mmap函数来实现。 MAP_NOCACHE标志告诉内核不要将映射的内存页缓存到文件系统缓存中&#xff…

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像&#xff0c;有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

Python语言例题集(013)

#!/usr/bin/python3 #建立循环链表。 class Node(): def init(self,dataNone): self.datadata self.nextNone n1Node(5) n2Node(15) n3Node(25) n1.nextn2 n2.nextn3 n3.nextn1 ptrn1 counter1 while counter<6: print(ptr.data) ptrptr.next counter1

ES相关性计算原理

了解es搜索过程中的相关性计算原理&#xff0c;对判断当前应用场景是否适合使用es来召回相关结果至关重要。本篇博文尝试对es在每一个节点执行搜索时如何计算query和经由倒排索引查询到的对应字段文本之间的相关性做简要说明。 ES搜索过程&#xff08;节点层面&#xff09; ES…

2024.4.27 —— LeetCode 高频题复盘

目录 102. 二叉树的层序遍历33. 搜索旋转排序数组121. 买卖股票的最佳时机200. 岛屿数量20. 有效的括号88. 合并两个有序数组141. 环形链表46. 全排列236. 二叉树的最近公共祖先 102. 二叉树的层序遍历 题目链接 Python 方法一 # Definition for a binary tree node. # clas…

深入浅出区块链技术:原理、应用与挑战

区块链技术是一种分布式数据库技术&#xff0c;其核心在于提供一个去中心化、不可篡改的数据记录系统。以下是区块链技术的原理、应用和面临的挑战的详细解析&#xff1a; ### 原理 1. **去中心化**&#xff1a;区块链技术不依赖于中央控制点&#xff0c;而是通过网络上的多个…

菜鸡学习netty源码(五)—— EventLoop

1.EventLoop的类关系图 2. EventExecutor /*** 返回自身的对象* Returns a reference to itself.*/OverrideEventExecutor next();/*** 获取所属的EventExecutorGroup* Return the {link EventExecutorGroup} which is the parent of this {link EventExecutor},*/EventExecuto…

利用大语言模型(KIMI)构建智能产品的信息模型

数字化的核心是数字化建模&#xff0c;为一个事物构建数字模型是一件非常繁杂和耗费人工的事情。利用大语言模型&#xff0c;能够轻松地生成设备的信息模型&#xff0c;我们的初步实验表明&#xff0c;只要提供足够的模板&#xff0c;就能够准确地生成设备的数字化模型。 我们尝…

Pytorch 实现 GAN 对抗网络

GAN 对抗网络 GAN&#xff08;Generative Adversarial Network&#xff09;对抗网络指的是神经网络中包括两个子网络&#xff0c;一个用于生成信息&#xff0c;一个用于验证信息。下面的例子是生成图片的对抗网络&#xff0c;一个网络用于生成图片&#xff0c;另一个网络用于验…

debootstrap构建基于Debian的嵌入式系统的rootfs

嵌入式芯片&#xff1a;iMX6ULL 准备环境&#xff1a; 确保您的开发机器已安装debootstrap和qemu-user-static&#xff08;如果您在非ARM机器上构建ARM rootfs&#xff09;。 sudo apt-get updatesudo apt-get install debootstrap qemu-user-static使用debootstrap创建rootf…