Unity之浅析 Entity Component System (ECS)

简介: 首先放出ECS官方文档随着目前游戏对CPU性能要求的不断提升,单核高频的CPU对我们的帮助越来越有限。所以ECS(一种面向数据编程)多核心工作的方式也是大势所趋。

首先放出ECS官方文档

随着目前游戏对CPU性能要求的不断提升,单核高频的CPU对我们的帮助越来越有限。所以ECS(一种面向数据编程)多核心工作的方式也是大势所趋。

笔者对ECS的浅显理解就是

  • Entity 传统组件的集合,代替了GameObject的位置
  • Component 纯数据,不含有其他逻辑行为。;例如:旋转速度,缩放大小之类的
  • System 业务逻辑,根据组件的集合(Enitites)和纯数据(Components)编写对应的逻辑

下面是环境配置,笔者使用的版本为Unity 2018.2.0b8 (64-bit)

目前的ECS分为两种 Pure ECS 与 HyBridECS 区别主要就是Pure版的不能使用GameObjectsMonoBehaviours 下面的示例用的是Hybrid版本

工程文件下载

下载安装后把.Net版本换成4.6

img_1ce3fe67efff5d821f15d34df3ab3197.png
然后安装对应的Packages包,这是一个unity的新功能,以后安装插件会更容易管理
img_3c56aecdfa570bc6518635ee2f3ae060.png

拖拽出对应的Entity Debugge面板

img_2487c620e4bb1daddf9dd5e01ebaaeb0.png

在两个对应的模型上添加两个脚本 GameObjectEntity(Unity自带脚本,没有这个ECS系统是不会执行的,相当于向ECS中注册)与RotationPlanet(稍后讲解)

这是会在Debugge面板上看到两个物体对应的Entity

img_c60ee0a268385cb10e6188c87fc30252.png

接下来是业务执行脚本 RotationPlanetSystem

img_8fc4cf44e5906548483b3fbedb7c7c32.png

运行

img_8f86a389e4fda125a1e2dfaa4a6dfda5.png
img_c9937234a404e550a51faa3ae2009bba.gif

多数据操作(ComponentArray)

效果如下:

img_c6b42bd266fac9f52c04f7986caf0a37.gif

纯数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 纯数据
/// </summary>
public class InputComponent : MonoBehaviour
{
    public float horizontal;
    public float vertical;
}

控制所有星球的移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;

//根据指定的数值对星球进行移动控制
public class PlanetMovementSystem : ComponentSystem
{
    /// <summary>
    /// Entity 组件集合
    /// </summary>
    private struct component
    {
        public Rigidbody rigidbody;
        public InputComponent inputComponent;
    }
    /// <summary>
    /// 具体逻辑操作
    /// </summary>
    protected override void OnUpdate()
    {
        var deltaTime = Time.deltaTime;

        foreach (var entity in GetEntities<component>())//获取所有指定的Entity
        {
            var moveVector = new Vector3(entity.inputComponent.horizontal, 0, entity.inputComponent.vertical);
            var movePosition = entity.rigidbody.position + moveVector.normalized * 6 * deltaTime;

            entity.rigidbody.MovePosition(movePosition);
        }
    }
}

控制所有纯数据的数值更改

其中Inject特性在ECS features in detail中有讲解

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
public class InputSystem : ComponentSystem
{
    private struct Data
    {
        public int Length;
        public ComponentArray<InputComponent> inputComponents; //数据集合
    }
    /// <summary>
    /// Inject特性在unity启动时自动赋值合适的Value
    /// </summary>
    [Inject] private Data data;
    protected override void OnUpdate()
    {
        var horizontal =  Input.GetAxis("Horizontal");
        var vertical = Input.GetAxis("Vertical");
        
        for (int i = 0; i < data.inputComponents.Length; i++)
        {
            data.inputComponents[i].horizontal = horizontal;
            data.inputComponents[i].vertical = vertical;
        }
    }
}
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
数据可视化 C# 图形学
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
239 0
|
7月前
|
图形学
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
206 0
|
前端开发 Go 图形学
Unity中查找子组件GameObject或Component的操作汇总
Unity中查找子组件GameObject或Component的操作汇总
204 0
|
图形学
Unity Particle System 制作刀光特效
Unity Particle System 制作刀光特效
553 1
Unity Particle System 制作刀光特效
|
图形学 C# vr&ar
Unity超綺麗海洋效果!「Crest Ocean System LWRP」
入门你好,我是一个悠闲的工程师。 我能做什么? 超綺麗海洋效果!它很漂亮,所以我介绍它。 太阳反射 被淹没时 水的表面 Crest is a technically advanced, feature rich ocean system targeted at PC and console platforms and Unity 2019 / LWRP 5.
|
弹性计算 Go 图形学
Unity 之 Pure版Entity Component System【ECS】 案例【GalacticConquest】解析【上】
以往没有了解过Unity ECS的小伙伴建议先看看我写过的两篇ECS文章 Unity之浅析 Entity Component System (ECS) Unity 之 Pure版Entity Component System (ECS) 官方R...
2066 0
|
弹性计算 图形学
Unity 之 Pure版Entity Component System (ECS)  官方Rotation示例解析
又有一段时间没有写博客了,真是不爽~~~ 趁着最近两天没事,赶紧补上一篇,这次开始写一篇Pure ECS版本示例解析,对上次Hybrid版本Unity之浅析 Entity Component System (ECS)的补充,使用的是官方案例的Rotation场景。
2042 0
|
9天前
|
弹性计算 数据挖掘 应用服务中间件
阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
226 86
|
2天前
|
存储 弹性计算 应用服务中间件
阿里云轻量应用服务器出新品通用型实例了,全球26个地域可选
近日,阿里云再度发力,推出了首款全新升级的轻量应用服务器——通用型实例。这款服务器实例不仅标配了200Mbps峰值公网带宽,更在计算、存储、网络等基础资源上进行了全面优化,旨在为中小企业和开发者提供更加轻量、易用、普惠的云计算服务,满足其对于通用计算小算力的迫切需求。目前,这款新品已在全球26个地域正式上线,为全球用户提供了更加便捷、高效的上云选择。
|
19天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考

热门文章

最新文章