解读GitHub EntityComponentSystemSamples

出自Unity官方的ECS项目示例,该项目的第一次Commit是在2018年3月20号,距离现在一年半的时间,这期间ECS本身的生态在快速发展,稳定性也是逐步提升,期待在2020年的Unity版本中作为正式组件发布。好了,下面进入正题~ 对该项目的README做简单翻译和总结。
欢迎
欢迎来到DOTS样品资源!
在这里,您可以找到今天开始使用这些新系统构建所需的资源。
我们还提供了一个论坛,您可以在其中找到更多信息并与这些新系统分享您的经验。
什么是面向Unity数据的技术堆栈?
我们一直在研究一种新的高性能多线程系统,这将使游戏能够充分利用当今可用的多核处理器而不会出现繁重的编程问题。面向数据的技术栈包括以下主要系统:
- 该实体组件系统提供了一种默认编写高性能的代码。
- 在C#作业系统提供了一种方法来运行多个CPU内核并行游戏代码
- 该突发编译一个新的数学感知,后台编译器调整的产生高度优化的机器代码。
通过这些系统,Unity可以为您正在编译的平台的特定功能生成高度优化的代码。
Entity Component System
实体组件系统提供了一种更好的游戏设计方法,使您可以专注于您正在解决的实际问题:组成游戏的数据和行为。它利用C#Job System和Burst Compiler使您能够充分利用当今的多核处理器。从面向对象的设计转向面向数据的设计使您可以更轻松地重用代码,并使其他人更容易理解和处理代码。
实体组件系统作为实验包提供,目前支持Unity 2018.3及更高版本。重要的是要强调实体组件系统不是生产就绪的。(译者注:ECS目前是预览版发布,其稳定性还不能应用于生产环境~)
C# Job System
新的C#作业系统以安全简便的方式利用多个核心。简单,因为它旨在将此方法打开到用户脚本,并允许您编写安全,快速,有效的代码,同时提供保护,以防止多线程的一些陷阱,如竞争条件。
C#作业系统是Unity 2018.1+中包含的内置模块。
Burst
Burst是一种新的基于LLVM的数学感知后端编译器。它将C#作业编译为高度优化的机器代码,利用您正在编译的平台的特定功能。
Burst是一个实验包,目前支持Unity 2018.3及更高版本。重要的是要强调Burst没有准备好生产。
观看Joachim Ante在Unite Austin展示这些新系统
样例
为了帮助您入门,我们提供了此示例存储库,用于学习如何大规模编写系统。
HelloCube
这是一组展示Unity ECS架构绝对基础的项目:
- ForEach - 创建一对旋转立方体。此示例演示了使用System和Components分离数据和行为。
- IJobForEach - 使用基于作业的系统构建在ForEach示例上。基于IJobForEach的系统是推荐的方法,可以利用可用的CPU内核。
- IJobChunk - 演示如何使用IJobChunk编写系统。IJobChunk是处理组件的推荐方法,用于比简单IJobForEach可以描述的更复杂的情况。
- SubScene - 演示如何在Unity编辑器中使用SubScenes创建和修改实体。
- SpawnFromMonoBehaviour - 演示如何基于Prefab GameObject从MonoBehaviour函数中生成多个实体。
- SpawnFromEntity - 演示如何使用系统中的生成作业在运行时生成多个实体。
- FluentQuery - 演示如何使用流畅查询来选择要更新的正确实体集。
- SpawnAndRemove - 演示产生和从世界中删除实体。
Boids
Boids示例提供了包含数千个实体的更复杂场景。Boids模拟水下场景,鲨鱼和学校包含数千条鱼。(它使用经典的Boids植绒算法来教育鱼类行为。)
空白ECS项目安装指南
- 打开Unity编辑器(
2019.1.0f1或更高版本) - 创建一个新项目。
- 打开包管理器(菜单:Window > Package Manager)。
- 单击窗口顶部的“ 高级”按钮,然后启用“ 显示预览包”选项。
- 将以下包添加到项目中:
- Entities
- Hybrid.Renderer
将实体包添加到项目中还会添加以下包:
- Burst
- Collections
- Jobs
- Mathematics
注意:您可以使用Unity Hub在同一台计算机上安装多个版本的Unity。
文档
寻找有关如何入门或具体问题的信息?访问我们的ECS和工作系统文档。
(原文链接:https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/README.md)
解读GitHub EntityComponentSystemSamples的更多相关文章
- 搜刮一些开源项目的APP
iOS完整App资源收集 <iOS完整app资源收集> <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...
- GitHub上README写法暨markdown语法解读
原文: GitHub上README写法暨markdown语法解读 自从开始玩GitHub以来,就 越来越 感觉它有爱.最近对它的 README.md 文件颇为感兴趣.便写下这贴,帮助更多的还不会编写R ...
- SDWebImage源码解读之SDWebImageCache(下)
第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...
- AFNetworking 3.0 源码解读 总结(干货)(上)
养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...
- MJRefresh 源码解读 + 使用
MJRefresh这个刷新控件是一款非常好用的框架,我们在使用一个框架的同时,最好能了解下它的实现原理,不管是根据业务要求在原有的基础上修改代码,还是其他的目的,弄明白作者的思路和代码风格,会受益匪浅 ...
- AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization
这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...
- AFNetworking 3.0 源码解读(四)之 AFURLResponseSerialization
本篇是AFNetworking 3.0 源码解读的第四篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...
- AFNetworking 3.0 源码解读(五)之 AFURLSessionManager
本篇是AFNetworking 3.0 源码解读的第五篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...
- YYModel 源码解读(二)之NSObject+YYModel.h (1)
本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...
随机推荐
- mysql基础_操作数据库以及表
1.数据库的操作 create database 数据库名:#一般创建方式 create database 数据库名 show databases;#查看所有数据 drop database 数据库名 ...
- P5357 【模板】AC自动机(二次加强版)
思路 这题可以同时作为AC自动机和SAM的模板啊喂 AC自动机 对T建出AC自动机,把S在上面匹配,然后记录每个点被经过的次数,最后统计一次即可(暴力跳fail的复杂度是不对的) SAM 对S建出SA ...
- 19-SQLServer定期自动导入数据的dtsx部署
一.注意点 1.登录Integration Service必须使用windows用户,并且只能在本地服务器登录. 2.SQLServer2000以前,叫dts,全程Data Transformatio ...
- 移动端H5开发问题记录
1. 当弹出键盘时,会改变页面高度,影响页面样式 通过window.onsize事件可以控制键盘弹出或消失的时候的样式 var h = document.body.scrollHeight // 用o ...
- 010_linuxC++之_运算符重载
(一)运算符重载:运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型. (二)实现类不同对象里中变量的相加 (三)程序 #include <iostream> ...
- @Controller 文件相关 @RequestMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping
https://blog.csdn.net/magi1201/article/details/82226289(copy) 最近学习看一些代码,发现对于发送请求这件事,有的地方用@RequestMap ...
- codeforces364D
Ghd CodeForces - 364D John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gc ...
- SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xce in position 0: invalid continuatio
点击 文档>>设置文件编码>>Unicode>>Unicode(UTF-8)
- 2016"百度之星" - 初赛(Astar Round2A)1006 Gym Class(HDU5695)——贪心+拓扑排序
分析:首先,利用贪心可知,如果要所有人的分数和最高,需要把序号大的优先放在前面.其次,对于a的前面不能为b,那么只能a在b前面了,那么就建立一条从a到b的边,并且b的入度加1.然后就是拓扑排序了.要分 ...
- JavaScript判断数据类型的4中方法
一: typeof typeof 是一种运算符,它的值有如下几种(number.boolean.string.undefined.null.function.object.symbol) consol ...