系统架构ecs 熟悉

守望先锋 就是用的这个逻辑

大佬文章要多读 贴几篇写的不错的讲解ecs的文章 可以先看看。
《守望先锋》架构设计与网络同步

https://blog.csdn.net/u010019717/article/details/80378385
这个两篇也很不错
Getting Started
inDetail

unity的一个esc的项目 github
https://github.com/sschmid/Entitas-CSharp

一篇 翻译不错的ecs文档
洞明 Unity ECS 基础概念

Entity-Component-System 登场
Entity-Component-System 是一种编写代码的方式,简称ECS,近年因OW被广泛熟知,ECS主要关注开发中一个很基本的问题:如何组建并处理游戏中的数据和行为。

在ECS模型中,Component(组件)只包含数据
ComponentSystem 则包含行为,一个 ComponentSystem 更新所有与之组件类型匹配的GameObject。

ComponentSystem -迈入新纪元的一步

using Unity.Entities;
using UnityEngine;

// 数据:可以在Inspector窗口中编辑的旋转速度值
class Rotator : MonoBehaviour
{
    public float Speed;
}

// 行为:继承自ComponentSystem来处理旋转操作
class RotatorSystem : ComponentSystem
{
    struct Group
    {
        // 定义该ComponentSystem需要获取哪些components
        public Transform Transform;
        public Rotator   Rotator;
    }

    override protected void OnUpdate()
    {
        // 这里可以看第一个优化点:
        // 我们知道所有Rotator所经过的deltaTime是一样的,
        // 因此可以将deltaTime先保存至一个局部变量中供后续使用,
        // 这样避免了每次调用Time.deltaTime的开销。
        float deltaTime = Time.deltaTime;

        // ComponentSystem.GetEntities可以高效的遍历所有符合匹配条件的GameObject
        // 匹配条件:即包含Transform又包含Rotator组件(在上面struct Group中定义)
        foreach (var e in GetEntities())
        {
            e.Transform.rotation *= Quaternion.AngleAxis(e.Rotator.Speed * deltaTime, Vector3.up);
        }
    }
}

Entity

是对所有ComponentData的一个集合,但是这个对格式有强要求
所有的数据都是struct类型不是是托管了(class),他们的数据存在是在内存块中(chunk)是连续的一个存储所以读取数据速度很快
这个涉及到 EntityManager 是对所有Entity的一个管理,
EntityManager拥有EntityData、EntityArchetypes、 SharedComponentData和ComponentGroup。
所有的Entity 实例化都是通过这个 有很多API 需要尽量使用,因为速度会快很多。

你可能感兴趣的:(系统架构ecs 熟悉)