解读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 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...
随机推荐
- css浮动(float)及如何清除浮动
前言: CSS浮动是现在网页布局中使用最频繁的效果之一,而浮动可以帮我们解决很多问题,那么就让我们一起来看一看如何使用浮动. 一.css浮动(float)(1)html文档流 自窗体自上而下分成一行一 ...
- ubuntu nginx 启动多个Django项目
1.将 /etc/nginx/sites-enabled/ 目录下的nginx默认配置文件default,重命名,例如:default1 2.给每个Django项目添加nginx.conf配置文件,建 ...
- canvas drawImage图片不显示问题
初次学习canvas,用来做笔记记录下遇到的问题及解决方案 这里是要将一张图片写到canvas里,按照网上搜索,初写了段代码,可是却没显示,以为是路径问题,不能跨域名使用,后来改为相对路径后,仍然无效 ...
- 2018-2019 ICPC, NEERC J. Streets and Avenues in Berhattan(DP)
题目链接:https://codeforc.es/contest/1070/problem/J 题意:给出一个长度为 k 的字符串,选出 n 个和 m 个不同位置的字符构成两个字符串,使得两个字符串相 ...
- zabbix添加监控项以及常用的键值
zabbix自身提供了丰富的监控项,下面以“cpu空闲值”为例介绍zabbix如何添加新的监控项 1.创建主机群组 配置——主机群组——创建主机群组 2.创建主机 配置——主机——创建主机 3.添 ...
- 记录一些mysql常用命令
启动mysql (ubuntu系统, 以下都是Ubuntu上操作的命令) 这些命令都是可以在任何目录下执行的. # [sudo] 表示可加可不加sudo [sudo] /etc/init.d/mys ...
- triggerHandler(type, [data])
triggerHandler(type, [data]) 概述 这个特别的方法将会触发指定的事件类型上所有绑定的处理函数.但不会执行浏览器默认动作,也不会产生事件冒泡. 大理石平台价格 这个方法的行为 ...
- vim 插件安装
一.pathogen简介 通常情况下安装vim插件,通常是将所有的插件和相关的doc文件都安装在中一文件夹中,如将插件全部安装在/usr/share/vim/vim73/plugin/目录下,将帮助文 ...
- node中的crypto内置模块
crypto模块的目的是为了提供通用的加密和哈希算法.用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢.Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaS ...
- jQuery属性操作之DOM属性操作
DOM属性操作是对DOM元素的属性进行读取.设置和移除操作, 比如prop(). removeProp(). 1. prop() 1.1 使用prop()获取返回值 prop() 用于返回属性值时, ...