【Unity3D】ECS入门学习(一)导入及基础学习

ops/2025/1/1 5:41:46/

Unity2019.4.0f1版本

打开PackageManager,开启preview 

搜索Entities、Hybrid Renderer插件下载

ECS:Entity Component System
实体:作用唯一ID(世界唯一,ECS有世界概念,每个世界是独立的,你无法搜索到另一个世界的实体?之后学习补充)
组件:struct 一个数据结构体(必须是结构体!)
系统:class 一个继承于ComponentSystem(还有其他的)类用于从世界中根据组件筛选实体,有很多种筛选方式。 

ConvertToEntity.cs脚本必须挂载到Cube上,由它驱动IConvertGameObjectToEntity接口执行,将物体转化为实体。

using Unity.Entities;/// <summary>
/// 组件,必须是结构体(创建这个脚本时 切记将class改为struct) 
/// ECS特别要注意高亮颜色,结构体和类的颜色是不一样的,结构体的绿色较为暗淡,类的颜色是鲜绿色
/// </summary>
public struct PrintTestComponentData : IComponentData
{public float num;
}
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;/// <summary>
/// 将物体转化实体脚本类
/// 并且转化时进行对实体entity添加组件PrintTestComponentData
/// 同时将helloworld参数传递到组件中
/// 
/// 我们需要将这个物体挂载到随便一个物体上,即利用Monobehaviour周期去创建一个实体,并且这个实体带有组件PrintTestComponentData
/// 它只会创建1个
/// </summary>
public class PrintTestConvert : MonoBehaviour, IConvertGameObjectToEntity
{public float num;public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem){//dstManager.AddComponentData(entity, new PrintTestComponentData() { //    num = num//});Debug.Log("创建实体;");dstManager.AddComponentData(entity, new RotationEulerXYZ());}
}
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;/// <summary>
/// 系统是class,ComponentSystem是最基础的组件系统基类
/// 使用系统从全局实体遍历筛选出带有<PrintTestComponentData>组件的实体
/// </summary>
public class PrintTestSystem : ComponentSystem
{protected override void OnUpdate(){Entities.ForEach((ref RotationEulerXYZ com, ref Translation translation) =>{//Debug.Log(com.helloworld);//Debug.Log(com.num);//com.Value = new float3(2, 2, 2);com.Value = new float3(0, 45, 0);translation.Value = new float3(3, 3, 3);});}
}

继承了ComponentSystem的系统通过ForEach从实体列表中筛选出带有RotationEulerXYZ和Translation组件的,并将它们的旋转角度和位置修改。

运行游戏后,发现Cube无法在Hierarchy面板看见了,我们只能从Entity Debugger查看实体数据。


http://www.ppmy.cn/ops/146078.html

相关文章

【k8s】在ingress-controlller中Admission Webhook 的作用

介绍1 在 NGINX Ingress Controller 中&#xff0c;Admission Webhook 是一种用于增强 Kubernetes API 请求的机制&#xff0c;它允许你在资源&#xff08;如 Ingress&#xff09;被创建或更新之前对这些请求进行验证或修改。具体来说&#xff0c;Admission Webhook 在 NGINX …

无人机搭载rtk技术详解!

一、技术原理 RTK定位定向技术的工作原理基于载波相位差分原理。地面基准站接收来自多颗卫星的信号&#xff0c;并计算其精确位置及载波相位观测值&#xff0c;随后将这些数据通过无线电或移动通信网络实时发送给无人机上的流动站。流动站同时接收来自卫星的信号&#xff0c;并…

Cadence学习笔记 14-15 按模块同步抓取器件_宏观布局

基于Cadence 17.4&#xff0c;四层板4路HDMI电路 更多Cadence学习笔记&#xff1a;Cadence学习笔记 1 原理图库绘制Cadence学习笔记 2 PCB封装绘制Cadence学习笔记 3 MCU主控原理图绘制Cadence学习笔记 4 单片机原理图绘制Cadence学习笔记 5 四路HDMI原理图绘制Cadence学习笔记…

C 语言中 strlen 函数的深入剖析

目录 一、strlen 函数的基本介绍 二、strlen 函数的工作原理 三、strlen 函数的使用注意事项 四、strlen 与其他字符串处理函数的结合使用 五、strlen 在实际编程中的应用场景 六、总结 在 C 语言的编程世界里&#xff0c;strlen函数是一个经常被使用但又容易被误解的重要…

python的OS模块和shutil模块使用

一. OS模块 os 模块提供了一个与操作系统交互的接口&#xff0c;可以用来处理文件和目录的路径、创建和删除目录、执行系统命令、获取和修改环境变量等操作。 1.文件和目录操作 1.1 获取当前工作目录 import oscurrent_dir os.getcwd() print(current_dir) # 输出当前工作…

Mooncake:kimi后端推理服务的架构设计

前言 本文依托论文《Mooncake: A KVCache-centric Disaggregated Architecture for LLM Serving》来讲解kimi的后端服务架构Mooncake,并按照自己的思路来梳理论文中的一些关键信息。 背景 服务端面临的问题 随着大模型技术越来越强,很多应用都是以Maas(Model as a Service…

Windows系统提示synsoacc.dll文件报错要怎么解决?

一、文件丢失问题&#xff1a;深度剖析与应对策略 文件丢失是电脑运行时常见的问题之一。它可能由多种原因引起&#xff0c;如硬盘故障、病毒攻击、不当的文件操作等。当Windows系统提示synsoacc.dll丢失时&#xff0c;通常意味着该文件对于当前正在运行的程序或系统服务至关重…

最新高性能多目标优化算法:融合高斯扰动与竞争学习的多目标加权平均算法(MOWAA)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码

一、加权平均算法 加权平均算法&#xff08;Weighted Average Algorithm, WAA&#xff09;是2024年提出的一种新型元启发式优化算法&#xff0c;其灵感来源于加权平均位置概念。WAA算法通过优化种群的加权平均位置来平衡全局搜索&#xff08;Exploration&#xff09;与局部开发…