出自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+中包含的内置模块。

可以在此处找到有关C#作业系统的更多示例项目

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项目安装指南

  1. 打开Unity编辑器(2019.1.0f1或更高版本)
  2. 创建一个新项目。
  3. 打开包管理器(菜单:Window > Package Manager)。
  4. 单击窗口顶部的“ 高级”按钮,然后启用“ 显示预览包”选项。
  5. 将以下包添加到项目中:
  • Entities
  • Hybrid.Renderer

将实体包添加到项目中还会添加以下包:

  • Burst
  • Collections
  • Jobs
  • Mathematics

注意:您可以使用Unity Hub在同一台计算机上安装多个版本的Unity。

文档

寻找有关如何入门或具体问题的信息?访问我们的ECS和工作系统文档。

转到ECS Samples文档

转到Unity Physics Samples文档

(原文链接:https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/README.md

解读GitHub EntityComponentSystemSamples的更多相关文章

  1. 搜刮一些开源项目的APP

    iOS完整App资源收集 <iOS完整app资源收集>  <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...

  2. GitHub上README写法暨markdown语法解读

    原文: GitHub上README写法暨markdown语法解读 自从开始玩GitHub以来,就 越来越 感觉它有爱.最近对它的 README.md 文件颇为感兴趣.便写下这贴,帮助更多的还不会编写R ...

  3. SDWebImage源码解读之SDWebImageCache(下)

    第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...

  4. AFNetworking 3.0 源码解读 总结(干货)(上)

    养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...

  5. MJRefresh 源码解读 + 使用

    MJRefresh这个刷新控件是一款非常好用的框架,我们在使用一个框架的同时,最好能了解下它的实现原理,不管是根据业务要求在原有的基础上修改代码,还是其他的目的,弄明白作者的思路和代码风格,会受益匪浅 ...

  6. AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization

    这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...

  7. AFNetworking 3.0 源码解读(四)之 AFURLResponseSerialization

    本篇是AFNetworking 3.0 源码解读的第四篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...

  8. AFNetworking 3.0 源码解读(五)之 AFURLSessionManager

    本篇是AFNetworking 3.0 源码解读的第五篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3 ...

  9. YYModel 源码解读(二)之NSObject+YYModel.h (1)

    本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...

随机推荐

  1. 多机部署lnmp-1

    第一台部署Nginx [root@lnmp ~]# cat /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx. ...

  2. zxy

    ZXY标准瓦片 发送反馈 SuperMap iServer .iEdge支持读取ZXY规范的地图瓦片,可对接 OpenStreetMap 等互联网的瓦地图服务.ZXY规范的地图瓦片规则如下:将地图全幅 ...

  3. centos6.5解压及压缩zip压缩包

    查看zip压缩文件的内容而不解压:unzip -l filename.zip 将zip包解压到指定路径(若不指定路径则为当前目录):unzip filename.zip -d /usr/file 压缩 ...

  4. js中showModalDialog的使用

    基本介绍:          showModalDialog()         (IE 4+ 支持)          showModelessDialog()      (IE 5+ 支持)    ...

  5. 第四届西安邮电大学acm-icpc校赛 流浪西邮之寻找火石碎片 多体积条件背包

    题目描述 众所周知,由于木星引力的影响,世界各地的推进发动机都需要进行重启.现在你接到紧急任务,要去收集火石碎片,重启西邮发动机.现在火石碎片已成为了稀缺资源,获得火石碎片需要钱或者需要一定的积分.火 ...

  6. jQuery系列(八):jQuery的位置信息

    1.宽度和高度 (1):获取宽度 .width() 描述:为匹配的元素集合中获取第一个元素的当前计算宽度值.这个方法不接受任何参数..css(width) 和 .width()之间的区别是后者返回一个 ...

  7. 灰度变换,gama变换,对数,反对数变换

    学习DIP第2天 灰度变换,及按照一定规则对像素点的灰度值进行变换,变换的结果可以增强对比度,或者达到其他的效果(例如二值化,或者伽马变换),由于灰度变换为针对单个像素点的灰度值进行变换,素以算法复杂 ...

  8. Python常用模块之hashlib模块

    1.hashilib模块的功能 python的hashlib提供了常见的摘要算法,如MD5, SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换成一 ...

  9. 微信sdk php签名方法整理

    <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...

  10. CountDownLatch和CylicBarrier以及Semaphare你使用过吗

    CountDownLatch 是什么 CountDownLatch的字面意思:倒计时 门栓 它的功能是:让一些线程阻塞直到另一些线程完成一系列操作后才唤醒. 它通过调用await方法让线程进入阻塞状态 ...