关于Unity 2018的实体组件系统(通用名称ECS)

将介绍如何在Unity上使用实体组件系统(通常称为ECS)。

这次的内容是Unity提供的ECS API的基本用法,一个小应用程序和并行化。

它不包括与Unity的GameObject / Component的合作,以及实际使用。

获取可以使用ECS的编辑器

Unity2018 和之后的版本都可以!

创建一个可以使用ECS的项目

要启用ECS,需要两件事。

 

  • 使使用 .NET 4.x
  • 重写 manifest.json

正常启动Unity并打开 Edit> PlayerSettings> PlayerSettings。

之后,将Scripting Runtime Version脚本运行时版本更改为Stable (.net 4.x)。

接下来是重写manifest.json。

由于在项目的Root文件夹/ Packages中有一个名为manifest.json的文件,因此我们将按照https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/TwoStickShooter/Pure/Packages/manifest.json 与此处相同的方式重写内容。

准备工作完成。

最小的ECS项目

首先,尝试尽可能地构建最有意义的功能。

这次要组织的功能就是这样

  • 统计每个帧

 

1、 没有使用 ECS的代码 :

首先我会试着用MonoBehaviour来组织它。这是一个非常简单的代码。

编写完成后,您可以将Counter组件添加到适当的GameObject中。

using UnityEngine;

public class Counter : MonoBehaviour{ public int count;

void Update () { count++; }}

 

接下来,让我们对应于ECS。有三件事要做

它是什么?麻烦? ECS就是这样

 

  • CountData 计数的值
  • CountSystem 实际计数
  • ECSMain 实体

ComponentDatas.cs

using Unity.Entities;

 

// 实体

public struct CountData : IComponentData

{

public int count;

}

 

CountSystem.cs

using Unity.Entities;

 

public class CountSystem : ComponentSystem

{

// System所需的ComponentData列表

struct Group

{

public int Length;

public ComponentDataArray<CountData> countData;

}

 

[Inject] Group group; // 注入请求的ComponentData

 

// 调用每一帧

protected override void OnUpdate()

{

for(int i=0; i<group.Length; i++)

{

var countData = group.countData[i];

countData.count++;

group.countData[i] = countData;

}

}

}

ECSMain.cs

using UnityEngine;

using Unity.Entities;

 

public class ECSMain : MonoBehaviour

{

void Start ()

{

// 获取EntityManager

var entityManager = World.Active.GetOrCreateManager<EntityManager>();

 

// 定义实体的原型

var sampleArchetype = entityManager.CreateArchetype(typeof(CountData));

 

// 实际上基于原型生成实体

entityManager.CreateEntity(sampleArchetype);

}

}

之后,如果您将ECSMain附加到适当的对象并Play,则第一步完成。

在Play期间,打开Window > EntityDebugger,当它从Systems列表中找到CountSystem时,它会变白,并且如果实体存在 。

如果没有实体,那么您有可能在没有CountData的情况下创建实体,或者您没有首先创建实体。另外,如果您没有系统,则创建ComponentSystem的代码有问题。

更多unity2018的功能介绍请到paws3d学习中心查找。链接https://www.paws3d.com/learn/,也可以加入unity学习讨论群935714213

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值