1.12 ECS

什么是Unity DOTS?

Unity面向数据的技术栈(data oriented tech stack, DOTS)包括以下主要部分:

  • Entity Component System 简记为ECS,提供了默认情况下写出高性能的代码的方法
  • C# Job System 提供了以并行的方式在多核CPU上运行游戏代码的方法
  • Burst compiler 一个math-aware,后端编译器(backend compiler),能产生高度优化的机器码(highly optimized machine code)

有了这些系统,Unity可以为你的目标平台的特殊能力,产生高度优化的代码。

Entity Component System (ECS)

ECS为游戏设计提供了较好的方式,使你可以专注于你要解决的实际问题:数据(data)和行为(behavior)。它利用C# Job System和Burst Compiler,使你能够充分利用现今的多核处理器。从面向对象到面向数据的设计使你能够更容易地重用代码,别人也更容易地理解你的代码。

ECS作为一个实验包(experimental package)发送,当前支持2018.3及以上版本。

C# Job System

新的C# Job System以一个安全、易用的方式利用多核处理器。容易是因为它被设计成向用户脚本开放,允许你写出完全、快速、jobified的代码,同时提供保护,避免一些多线程的陷阱,如:条件竞争(race conditions)。

C# Job System是Unity 2018.1之后一个内置的模板。

Burst

Burst是一个新的LLVM-based, math-aware的后端编译器(backend compiler)。它把C# jobs编译高度优化的机器码,充分利用目标平台的特定能力(particular capabilities)。

Burst是一个实验包,支持Unity 2018.3及以后版本。

Watch Joachim Ante present these new systems at Unite Austin

创建一个空白ECS项目指南

  1. 打开Unity Editor (2019.1.0f1及以上版本)
  2. 创建一个新的Project
  3. 打开Package Manager(菜单:Window > Package Manager)
  4. 点击Advanced按钮,打开Show preview packages选项
  5. 添加以下packages:
  6. Entities
  7. Hybrid.Renderer

添加Entities包时,也会把以下packages添加到项目中:

  • Burst
  • Collections
  • Jobs
  • Mathematics

注意: 你可以使用Unity Hub在一台电脑上安装多个版本的Unity。

关于Package Manager的详细使用方法,见这里

(后续会写更多关于Unity DOTS的内容。)

References:

  • https://unity.com/dots
  • ECS Sample Projects

ECS为什么有用?

ECS是Unity DOTS的一部分,即Entity Component System。

  • Extremely performant code (default) (默认写出的代码是极其高效的)
  • Easier to read (易读)
  • Easier to reuse code (易重用)
  • Take advantage of Burst Compiler for High Performance C# (充分利用Burst编译器和HPC#)
  • C# Job System (能够利用C# Job System)

总是,ECS是一种更好的组织数据的方式,让我们这些普通程序员也能写出极其高效的代码。

什么是ECS?

ECS基本上就是Unity中一个新的写代码的方式。使用ECS,我们将从传统面向对象编程转为面向数据编程。

当前,以传统或经典方式(Unity 2018以前)使用Unity时,基本上任何东西都是围绕着GameObjectMonoBehaviour。比方说,想创建一个玩家角色,一般情况下我们会创建一个GameObject,然后命名为Player。然后,为了使这个玩家具有某些功能,我们会为这个Player对象添加各种组件(即各种MonoBehaviour)。这些添加的组件负责实现渲染(rendering, 如MeshRenderer),物理效果(如碰撞)和移动等。

然而!!!使用ECS时,我们的游戏会分成三个部分: Entities, Components和Systems。没有GameObject和MonoBehaviour的概念了(以兼容模式使用ECS时,还可以部分地使用MonoBehaviour。Unity提供了工具把GameObject转换为Entity)。

Entities 用于把components组织起来。它们很像传统方式中的(轻量级的)GameObject。

Components 只是数据的容器,不包含任何逻辑(即对数据的处理)。

Systems 中包含的是游戏逻辑、行为(behavior),处理Components中的数据。这意味着一个System负责处理所有具有某些Components的Entities。

现在,使用ECS的情况下,我们要创建一个玩家角色(player),我们会创建一个Entity,再在这个Entity上放置Components。注意,这些Components唯一的工作就是存储关于一个player的数据,没有任何逻辑。然后,我们创建Components,例如,创建一个render system,来渲染所有的Entities。ECS包已经提供了一些基本的可用的Systems。

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

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

相关文章

openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态

文章目录 openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态195.1 分析查询语句运行状态195.1.1 问题现象195.1.2 处理办法 openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态 195.1 分析查询语句运行状态…

什么软件可以做报表?

数据报表,是商业领域中不可或缺的一部分,它通过表格、图表等形式,将复杂的数据进行整理、分析并呈现出来,帮助用户更好地理解数据的趋势和关系。数据报表不仅展示了业务现状和趋势,还支持多种数据分析和挖掘功能&#…

代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表

代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表 文章目录 代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表1 链表理论基础1.1 链表的定义1.2 链表的类型1.3 链表的存储方式1.4 链表的操作性能分析1.5 链表和数组的区…

vue3的Uniapp用renderjs 进行视频切图操作

首先&#xff0c;在项目中安装 RenderJS npm install renderjs在 Vue3 的 UniApp 中引入 RenderJS&#xff1a; import RenderJS from renderjs;创建一个 RenderJS 实例&#xff0c;并将其绑定到一个视频元素上 <template><view><video ref"video"…

使用Adobe Acrobat Pro DC给pdf文件填加水印

前言 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&#xff0c;就可以按使用量付费&#xff0c;用多少付多少&#xff0c;而且没有3个小时内只能提问50条的使用限制。 但是对很多人来说调用接口是比较麻烦…

使用new pm写一个pass

范例来自LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries llvm ir到ir是由一个个pass处理的&#xff0c;从一个ir到另一个ir会改变一些东西 书里面就是说想要给指针变量添加一个noalias属性 书里面使用插件的形式&#xff0c;但是不知道怎么我搞不…

在阿里巴巴,领导提拔你不是看重你的能力

很多人都在想&#xff0c;为什么领导总是不提拔你&#xff0c;难道真的是如领导给你的反馈“你的能力不行”&#xff0c;这里我想告诉大家&#xff0c;这件事情绝对没有这么简单&#xff0c;尤其是在阿里巴巴这样“江湖气”非常浓的大厂。 Part.1 领导要提拔你&#xff0c;绝对…

网络变压器POE的功能

网络变压器&#xff0c;也被称为POE&#xff08;Power over Ethernet&#xff09;&#xff0c;是一种用于在以太网中传输数据和电力的技术。它的主要功能包括&#xff1a; 1. 传输数据&#xff1a;网络变压器可以传输高速的网络数据&#xff0c;如10/100/1000Mbps。 2. 传输电…

原型模式

为什么要使用原型模式 不用重新初始化对象&#xff0c;而是动态地获得对象运行时的状态。适用于当创建对象的成本较高时&#xff0c;如需进行复杂的数据库操作或复杂计算才能获得初始数据。 优点是可以隐藏对象创建的细节&#xff0c;减少重复的初始化代码&#xff1b;可以在…

代码随想录算法训练营第六天|哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

刷题建议 刷题建议与debug 代码随想录目前基本都有了视频讲解&#xff0c;一定要先看视频&#xff0c;事半功倍。写博客&#xff0c;将自己的感悟沉淀下来&#xff0c;不然会忘大家提问的时候&#xff0c;记得要把问题描述清楚&#xff0c;自己在哪一步遇到了问题&#xff0c…

【工具栏】jclasslib 插件的安装和使用

1. 安装 2.使用 安装之后 在 view 的 ToolWindows 里也有一个这样的窗口 jclasslib 的主要作用是查看字节码的相关信息 package com.test;public class Test {public static void main(String[] args) {Integer a 1;int b a 2;} }例如我写了一段这样的代码&#xff0c;然后去…

蓝凌EIS智慧协同平台 多处SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 doc_fileedit_word.aspx、frm_form_list_main.aspx、frm_butt…

训练营第四十三天 | ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II 分成容量相近的两部分&#xff0c;相减 代码随想录 class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for(int num : stones) {sum num;}int target sum >> 1;//将数组总和分为两部分 向下取整 取小容量为target…

vcruntime140.dll已加载,但找不到入口点的处理方法分享

当遇到错误提示“vcruntime140.dll已加载&#xff0c;但找不到入口点”时&#xff0c;很多人可能会感到困惑&#xff0c;不知道如何去处理这个问题。不过没有必要紧张&#xff0c;在这里我会为大家详细解释 vcruntime140.dll 文件是什么&#xff0c;并指导大家如何高效地解决 v…

最佳实践:如何在 SoapUI 中进行 REST 服务的测试

SoapUI 频繁地被选择为 SOAP 和 REST API 的自动化测试利器&#xff0c;得益于其友好的用户界面&#xff0c;测试人员毫不费力便可校验 REST 和 SOAP 协议的 Web 服务。它尤其适用于那些需要进行复杂测试的场合。 1、设置接口 我利用了 Swagger 去设置了一批即将投入使用的接…

数字集成系统设计——物理设计

目录 一、布局规划 1.1 规划 1.2 I/O单元 1.3 电源网络 1.3.1 要求 1.3.2 网络架构 1.3.3 混合信号芯片示例 1.4 布局 二、时钟分布 2.1 时钟偏斜 2.2 时钟分布网络 2.3 时钟树综合 2.4 时钟树收敛 三、布线与参数提取 3.1 布线(Routing) 3.2 布线规则示例 …

全球化时代跨境企业协作之道:实用策略与实践分享

全球化时代跨境企业如何更好地异地协作&#xff1f;是许多跨境企业亟待解决的问题。ZOHO作为全球化企业服务品牌&#xff0c;又给出了怎样的答案&#xff1f; Zoho Workdrive企业网盘&#xff0c;为跨境企业提供了一种高效、安全的文件传输和协作方式。 Zoho Workdrive…

对比学习2024最新SOTA&应用方案分享,附14篇必读论文和代码

同学们发现没有&#xff0c;对比学习在我们的日常工作生活中已经很常见了&#xff0c;比如推荐系统任务&#xff0c;为用户推荐相似的商品或预测用户的购买行为&#xff1b;又比如图像检索&#xff0c;为用户找相似图片或识别不同物体。另外还有语音识别、人脸识别、NLP&#x…

C++:cout 的一些注意事项

有时cout不会将结果立即输出到屏幕&#xff08;也就是缓冲&#xff09;&#xff0c;该情况不会对竞赛测评有影响。 例子如下&#xff1a; ps:用puts立即输出 原因&#xff1a; 解决方法&#xff1a;在每一个cout后跟\n或flush cout << "This will be immediately d…

【我的Rust库】get_local_info 0.1.9发布

0.1.6、0.17版发布三天&#xff0c;累计阅读量超过一千。感谢大家的喜欢&#xff0c;我的运气真好。 今天发布0.1.9版&#xff0c;原因是0.1.8让我把版本号写错了。哈哈 0.1.9 增加目录遍历 get_local_info是一个获取linux本地信息的Rust三方库&#xff0c;其目标是降低获取…