当前位置: 首页 > news >正文

Unity DOTS技术(二)ECS

文章目录

  • 一.ECS简介
  • 二.基本操作实例
  • 三.实体查看组件
  • 四.位置实体修改
  • 五.旋转实体
  • 六.了解原有属性
  • 七.禁止自动创建
  • 八.动态实例化


一.ECS简介

ECS全称 (Entity Component System).即(E:实体 C:组件 S:系统).
实际上即是数据方法分离.数据放在组件里,具体实现放在系统里.组件挂载在实体上.
为了让大家快速了解,本次介绍是以下内容:
在这里插入图片描述

下面举个简单的的例子:

二.基本操作实例

1.创建数据组件,继承IConponentData接口
在这里插入图片描述

2.系统组件创建一个系统继承ComponentSystem
在这里插入图片描述

3.创建一个中转组件,这样我们就可以将此脚本挂在物体上(比如一个Cube),
这个脚本生成PrintComponentData1并挂在物体上.
此时该物体刚成为一个实体
在这里插入图片描述

4.运行后实体在编辑器场景列表中的Hierarchy中是看不到的
不过我们可以看到打印.我们需要使用场景查看组件来查看

三.实体查看组件

通过菜单栏Windows > Analysis > Entity Debugger
在这里插入图片描述

在这个列表中可以看到正在运行的物体及系统
在这里插入图片描述

四.位置实体修改

在这里插入图片描述

此设置后,挂载ConterToEnitiy组件的位置将被设置为 1,1,1,相当于Position

五.旋转实体

1.创建该脚本挂载物体上
在这里插入图片描述

2.创建该脚本,即可通过Foreach的方式,找到所有RotationEulerXYZ的脚本进行旋转
在这里插入图片描述
在这里插入图片描述

六.了解原有属性

通过可以查看视图 > 对象浏览器,发现我们的Transform是包含了很多冗余的内容,其实并不一定会用到.
在这里插入图片描述
在这里插入图片描述

七.禁止自动创建

系统在程序中即使不挂载也会自动运行,下面介绍一个系统特性.
使用DisableAutoCreation即可禁止自动运行.
在这里插入图片描述

八.动态实例化

1.创建ECS预制体,挂载以上两个插件
在这里插入图片描述

2.编写代码
在这里插入图片描述

using Unity.Entities;
using UnityEngine;
public class ECSPrefabCreator : MonoBehaviour
{public GameObject cube;// Start is called before the first frame updatevoid Start(){//对于Cube的设置GameObjectConversionSettings tempSettings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, null);Entity tempEntityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(cube, tempSettings);//获取全局物体管理器EntityManager tempEntityManager = World.DefaultGameObjectInjectionWorld.EntityManager;//物体实例化Entity tempCube = tempEntityManager.Instantiate(tempEntityPrefab);}
}

3.挂载脚本
在这里插入图片描述

4.修改位置
在这里插入图片描述

Translation tempTranslation = new Translation();
for (int i = 0; i < sum; i++)
{for (int j = 0; j < sum; j++){//物体实例化Entity tempCube = tempEntityManager.Instantiate(tempEntityPrefab);//设置位移tempTranslation.Value.x += interval;tempEntityManager.SetComponentData(tempCube, tempTranslation);}//设置位移tempTranslation.Value.x = 0;//设置位移tempTranslation.Value.y += interval;
}

相关文章:

  • Nginx通过转发代理解决跨域问题
  • Matlab 2024a 建模基础知识全面指南
  • ArrayList——简单洗牌算法
  • uni-app基础框架搭建(vue3+ts+vite)
  • 【杂记-浅谈Internet、Intranet、Extranet】
  • 抖音素材网站有哪些?抖音素材下载网站分享
  • mongodb集群
  • LeetCode|938. Range Sum of BST
  • Python中的列表推导式和字典推导式:优雅且高效的数据结构生成方式
  • 每天坚持写java锻炼能力---第一天(6.4)
  • javaweb的新能源充电系统的设计
  • 【JS】JavaScript编程语言-(Object)对象属性标志与对象属性描述符(2024-06-05)
  • 大模型日报2024-06-06
  • RabbitMQ(五)集群配置、Management UI
  • UFS协议—新手快速入门(二)【5-6】
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Javascript设计模式学习之Observer(观察者)模式
  • JavaScript学习总结——原型
  • JAVA并发编程--1.基础概念
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • React组件设计模式(一)
  • swift基础之_对象 实例方法 对象方法。
  • Tornado学习笔记(1)
  • unity如何实现一个固定宽度的orthagraphic相机
  • Xmanager 远程桌面 CentOS 7
  • 阿里云购买磁盘后挂载
  • 搞机器学习要哪些技能
  • 使用putty远程连接linux
  • 数组大概知多少
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • (1)常见O(n^2)排序算法解析
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)字符分类函数
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)计算机毕业设计ssm电影分享网站
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四) Graphivz 颜色选择
  • (已解决)什么是vue导航守卫
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Mysql的优化设置
  • (转)nsfocus-绿盟科技笔试题目
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .Mobi域名介绍
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 表达式计算:Expression Evaluator
  • .net反编译的九款神器
  • .NET构架之我见
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET与 java通用的3DES加密解密方法