来回ECS

哈Ha!我向你文章的翻译“ECS来回 -第一部分-引言”米歇尔skypjack彩妮


来回ECS


第1部分-简介。


当我第一次了解架构模板实体实体组件系统时,我去了Internet上寻找有关它的更多信息。但是,不幸的是,关于这个主题的讨论还不够充分,也没有资源可以描述其优缺点的不同方法。几乎每篇文章,帖子,评论(很大一部分)都是关于一个特定的实现的,仅略微提及了其他示例。


在本文中,我将尝试让您快速入门,并为您找到一些入门模型,并提供一些技巧,以便您可以制作自己的ECS。


为什么要使用ECS?


尽量不要被周围的人所迷惑。如果您正在认真地从事AAA项目,那么应该使用这样一个认真的工具的主要原因是代码的组织,而不是(仅)性能。当然,性能并不是最后的决定,但是组织良好的代码库是无价的,并且在大多数游戏中,您不会遇到性能问题,无论是使用OPP范式还是使用组件模板的其他可选实现编写的。


本质上,面向组件的编程是一种非常强大的工具,它使您可以轻松地扩展代码并加快开发周期。毫无疑问,所有这些都是您的主要目标。


当然,不要忘记性能。尽管当我们处于不同的联盟中时,在以下文章和以下介绍性文章中,我将为您提供足够的模型示例,但至少某些模型将精确地针对性能。


介绍


首先,让我们弄清楚从OOP切换到组件世界意味着什么。


粗略地说,这是事物分离的问题。想象一下您在飞机上所有物体的概念(类)。在这里,矮人,小精灵,游戏角色,石头等等都相互跟随。在我们这里,只有两种切割方法:水平切割和垂直切割。
如果垂直切割,这些概念本身将独立存在。换句话说,普通的OOP类仅此而已。


, , , . , , .


?


( ), update . , , , .


, . . , , . , .


, , - .


ECS back and forth


ECS.


, , .
«Game Programing Patterns». -.


, ECS , .


, , .



- . , , . , . , .


– . .


. , — . , .


, , , , -. - , , . , - . , , , - .


family generator. , . , : entityx and EnTT.


family generator.


class family {
    static std::size_t identifier() noexcept {
        static std::size_t value = 0;
        return value++;
    } 

public:
    template<typename>
    static std::size_t type() noexcept {
        static const std::size_t value = identifier();
        return value;
    }
};

:


const auto id = family::type<my_type>();

. . , , .


family generator . , , , .


:


- ( ) . – ECS, , , - .


, , - , .


?


, , . , , . bitset .


, , . family generator , . .


, — . , , , . :


void my_nth_system(std::vector<game_objects> &objects) {
    for(auto &&object: objects) {
        if(object.has<position, velocity>()) {
            auto &pos = object.get<position>();
            auto &vel = object.get<velocity>();

            // ...
        }
    }
}

, : , . , , .


. , . , : , , .


. , , , . , , , , , . , . , , .


, – . ? . , . , ? , - , .


: —


– .


. , . . , . .


, , - , — :). , . 0, – 1, . , , 0, 1.


? , , , 0 0, 1 1, . , N M , .


. , , . , . - , entityx, ECS C++.


bitset . . , C N > 0. C , N . C 0, . ? Bitsets – .


, , , bitsets .


, , . , , , , , -, . , : - - , , . , , , , , . bitset , .


?


, . , , , , , .


, . , , , , .


,


, , .


, , GitHub , . , .


.


All Articles