Unity之浅析 Entity Component System (ECS)

本文涉及的产品
云服务器 ECS,u1 2核4GB 3个月
云服务器 ECS,u1 4核8GB 1个月
云服务器 ECS,每月免费额度200元 3个月
简介: 首先放出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;
        }
    }
}
相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
数据可视化 C# 图形学
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
8 0
|
2天前
|
图形学
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
6 0
|
8月前
|
前端开发 Go 图形学
Unity中查找子组件GameObject或Component的操作汇总
Unity中查找子组件GameObject或Component的操作汇总
117 0
|
图形学
Unity Particle System 制作刀光特效
Unity Particle System 制作刀光特效
461 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...
2004 0
|
弹性计算 图形学
Unity 之 Pure版Entity Component System (ECS)  官方Rotation示例解析
又有一段时间没有写博客了,真是不爽~~~ 趁着最近两天没事,赶紧补上一篇,这次开始写一篇Pure ECS版本示例解析,对上次Hybrid版本Unity之浅析 Entity Component System (ECS)的补充,使用的是官方案例的Rotation场景。
1967 0
|
1天前
|
弹性计算 安全 Shell
阿里云ECS安全加固:从访问控制到数据保护的全方位策略
【6月更文挑战第29天】阿里云ECS安全聚焦访问控制、系统加固及数据保护。安全组限定IP和端口访问,密钥对增强SSH登录安全;定期更新补丁,使用防病毒工具;数据备份与加密确保数据安全。多维度策略保障业务安全。
23 15
|
2天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。
|
2天前
|
小程序 数据安全/隐私保护
阿里云新手入门:注册账号、实名认证、申请免费云服务器
阿里云新手指南:注册账号(手机号或支付宝快捷注册),完成实名认证(个人/企业)。通过免费服务器获取3个月试用。创建后,设置密码,远程连接,配置安全组规则,部署应用,如建站与环境安装。详询官方教程。