Unity2018 ECS框架简明教程

来源:http://www.u3dc.com/archives/2998
——————————————————————————————————
{
“dependencies”: {
“com.unity.modules.ui”: “1.0.0”,
“com.unity.modules.tilemap”: “1.0.0”,
“com.unity.modules.physics2d”: “1.0.0”,
“com.unity.modules.assetbundle”: “1.0.0”,
“com.unity.modules.unitywebrequestassetbundle”: “1.0.0”,
“com.unity.test-framework.performance”: “0.1.47-preview”,
“com.unity.modules.unityanalytics”: “1.0.0”,
“com.unity.modules.umbra”: “1.0.0”,
“com.unity.modules.vehicles”: “1.0.0”,
“com.unity.modules.imageconversion”: “1.0.0”,
“com.unity.modules.director”: “1.0.0”,
“com.unity.modules.video”: “1.0.0”,
“com.unity.modules.audio”: “1.0.0”,
“com.unity.modules.unitywebrequest”: “1.0.0”,
com.unity.modules.ai”: “1.0.0”,
“com.unity.modules.unitywebrequestwww”: “1.0.0”,
“com.unity.modules.particlesystem”: “1.0.0”,
“com.unity.modules.imgui”: “1.0.0”,
“com.unity.modules.physics”: “1.0.0”,
“com.unity.modules.screencapture”: “1.0.0”,
“com.unity.modules.xr”: “1.0.0”,
“com.unity.modules.terrain”: “1.0.0”,
“com.unity.modules.unitywebrequestaudio”: “1.0.0”,
“com.unity.modules.jsonserialize”: “1.0.0”,
“com.unity.modules.terrainphysics”: “1.0.0”,
“com.unity.entities”: “0.0.12-preview.21”,
“com.unity.modules.animation”: “1.0.0”,
“com.unity.package-manager-ui”: “2.0.0-preview.3”,
“com.unity.modules.cloth”: “1.0.0”,
“com.unity.modules.uielements”: “1.0.0”,
“com.unity.modules.vr”: “1.0.0”,
“com.unity.modules.unitywebrequesttexture”: “1.0.0”,
“com.unity.modules.wind”: “1.0.0”
},
“registry”: “https://packages.unity.com”,
“testables”: [
“com.unity.collections”,
“com.unity.entities”,
“com.unity.jobs”,
“com.unity.test-framework.performance”
]
}
——————————————————————————————————————

U3DC.COM

Unity2018 ECS框架简明教程

 简介

全新的Unity官版ECS在Unite2017 Austin就已经show过了,主要特征如下:

  • 数据和行为分离
  • 在通常的Unity开发中,我们会将Monobehavior组件挂载到一个Gameobjec上,而ECS中,则将设计为将组建附加到Entity上
  • 使用一个池子(pool)来存放所有的Entity
  • 可以给Entity设定分组(group)
  • 通过matcher来获取指定的Entity

环境

需要环境如下:

  • Unity 2018及以上,理论上2017的最后几个版本也可以,主要是要支持.net 4.6
  • 安装ECS包

步骤

  • 下载最新版Unity,建议官方下载
  • 开Unity,新建一个项目:

  • 进入Unity后,设置.net版本:依次点击File - BuildSetting - PlayerSetting - Other Setting - Scripting Runtime Version 设置为.NET 4.x Equivalent,会提示重启,点Restart重启Unity即可。
  • 打开项目目录(即创建项目的文件夹),找到Packages目录,并找到里面的manifest.json文件

  • 打开manifest.json文件,并将以下内容复制进去,并保存:

{
"dependencies": {
"com.unity.entities": "0.0.12-preview.5"
},
"registry": "https://packages.unity.com",
"testables": [
"com.unity.collections",
"com.unity.entities",
"com.unity.jobs"
]
}

  • 在此进入Unity的环境时,会进行下载ECS包和导入,导入完成后,我们会发现顶部菜单栏多了Jobs项,

  • 菜单栏打开Windows - Packages Manager 也可以看到Entities已经安装:

  • 接着我们来写个让cube旋转的测试样例:
  • 新建一个Rotator.cs脚本

代码如下:

public class Rotator : MonoBehaviour {

public int speed;
}

  • 没错,这个脚本继承自monobehavior,但是,他就只有一个字段,即,只有数据
  • 再新建一个类,叫RotateSystem.cs,这个类我们让它继承ECS

using Unity.Entities;

public class RotateSystem : ComponentSystem
{

}

  • ComponentSystem来自Unity.Entities命名空间,所以,在开头需要进行引用。
  • 创建一个结构体,作为容器来存储数据:

struct Components
{
public Rotator rotator;
public Transform transform;
}

  • Rotator就是上面创建的数据类,同时这里还存了一个transform,因为我们需要使用transform的实例方法
  • 因为继承了ComponnetSystem,所以这个类还需要实现基类的一个OnUpdate方法:

protected override void OnUpdate()
{
}

  • 这个方法同monobehavior一样,也是每帧调用。
  • 在这个方法中,我们遍历下场景的所有Entity,使用GetEntities接口进行遍历即可

foreach (var item in GetEntities<Components>())
{
}

  • 然后就是对遍历出来的子项做一些行为操作:

foreach (var item in GetEntities<Components>())
{
item.transform.Rotate(0f, item.rotator.speed * Time.deltaTime, 0f);
}

  • 到这里,代码算是告一段落了,我们需要在Unity中进行一些操作设置
  • 在Unity界面下的Hierrarchy窗口下右键创建一个Cube,然后挂载Rotator.cs脚本
  • 再给cube添加一个GameObjectEntity脚本(ECS系统内置脚本,不需要你自己写)
  • 现在点击运行,并给cube身上的rotator脚本设置speed的值,cube就可以转起来了。
  • 你可以多复制几十或者几百个测试下效率。
  • 当然,上面那个遍历脚本还可以优化一下,就是将Time.delaTime缓存一下,而不是放到循环里去,

var deltaTime = Time.deltaTime;

foreach (var item in GetEntities<Components>())
{
item.transform.Rotate(0f, item.rotator.speed * deltaTime , 0f);
}

  • 就不贴什么完整源码了,建议自己敲一敲,反正,也没几行代码。
  • OVER
  • 2018.6.5 优三帝同学 By Mark
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值