Sistema de componentes de entidade
โก Resumo Inteligente
O padrรฃo arquitetural Entidade-Componente-Sistema (ECS, na sigla em inglรชs) รฉ amplamente utilizado no desenvolvimento de jogos. Ele prioriza a composiรงรฃo em detrimento da heranรงa: as entidades sรฃo identificadores, os componentes armazenam dados e os sistemas contรชm a lรณgica que atua sobre as entidades com componentes correspondentes.

O que รฉ entidade-componente-sistema?
Entidade-Componente-Sistema (ECS) รฉ um padrรฃo arquitetรดnico. Esse padrรฃo รฉ amplamente utilizado no desenvolvimento de aplicativos de jogos. O ECS segue o princรญpio da composiรงรฃo sobre a heranรงa, o que oferece melhor flexibilidade e ajuda a identificar entidades onde todos os objetos na cena de um jogo sรฃo considerados uma entidade.
A programaรงรฃo ECS รฉ um mรฉtodo de escrever cรณdigo que fornece alto desempenho por padrรฃo.
Este sistema consiste em trรชs termos.
- Entidade
- Componente
- System
Vamos aprender esse conceito em detalhes:
O que รฉ uma entidade?
Uma entidade รฉ um objeto distinto que representa um ator em um espaรงo simulado. Nรฃo contรฉm dados ou comportamento reais. Este componente fornece seus dados a uma entidade. Normalmente รฉ um suporte ou dicionรกrio.
Por exemplo, se estivermos simulando o universo de um jogo Minecraft, todas as 'coisas' visรญveis e tangรญveis no universo do jogo sรฃo contadas em entidades.
O que รฉ um Componente?
Um componente รฉ um comportamento singular atribuรญdo a uma entidade. Idealmente, o nome de um elemento deve comunicar qual comportamento a entidade exibirรก. No entanto, o componente em si nรฃo tem comportamento. Eles sรฃo mรณdulos reutilizรกveis โโanexados a entidades. O componente fornece aparรชncia, comportamento e funcionalidade.
Toda a lรณgica รฉ implementada por meio de componentes que ajudam a definir diferentes tipos de objetos, misturando e configurando componentes.
O que รฉ o sistema?
Um sistema irรก iterar muitos componentes para executar tarefas de baixo nรญvel.
funรงรตes como renderizaรงรฃo de grรกficos, execuรงรฃo de fรญsica
cรกlculos ou pathfinding. Oferece escopo global, gerenciamento e serviรงos para classes de componentes.
No entanto, os sistemas nรฃo sรฃo opcionais, mas podemos usรก-los para separar lรณgica e dados. Tambรฉm ajuda a lidar com os componentes lรณgicos e atuar como contรชineres de dados.
Exemplos
- Gravidade (Velocidade) โ Ajuda a acelerar a velocidade devido ร gravidade
- Adiciona velocidade ร posiรงรฃo
- Define a entrada de uma entidade controlada por bot de acordo com um agente de IA
- Renderizar (Posiรงรฃo, Sprite) โ Desenha sprites
- O Controle do Jogador (Input Player) ajuda a definir a entrada da entidade controlada pelo jogador de acordo com um controlador.
Composiรงรฃo
Uma composiรงรฃo รฉ um elemento ao qual vocรช pode anexar mais componentes para adicionar aparรชncia, comportamento ou funcionalidade adicional. Vocรช tambรฉm pode atualizar os valores dos componentes para configurar a entidade.
Vantagem do ECS
Aqui estรฃo as vantagens de usar ECS na programaรงรฃo:
- Vocรช pode criar cรณdigos mais curtos e menos complicados.
- Comportamento emergente muito flexรญvel.
- Ele fornece uma arquitetura para desenvolvimento 3D e VR.
- Permite scripts por comportamento de nรฃo tรฉcnicos.
- Isso ajuda vocรช a dividir suas classes monolรญticas.
- Fรกcil recusa e compossibilidade.
- Uma opรงรฃo fรกcil para testes unitรกrios e simulaรงรฃo.
- Ele permite que vocรช crie um aplicativo de VR em termos de complexidade.
- Substitua componentes por componentes simulados em tempo de execuรงรฃo.
- Isso ajuda vocรช a estender novos recursos.
- ECS รฉ um mรฉtodo amigรกvel para processamento paralelo e multithreading,
- Ajuda vocรช a separar os dados das funรงรตes que atuam sobre eles
- Fornece melhor flexibilidade ao definir objetos misturando com peรงas reutilizรกveis.
- Ele oferece um design limpo usando mรฉtodos de desacoplamento, encapsulamento, modularizaรงรฃo e reutilizaรงรฃo.
Desvantagens de usar ECS
Aqui estรฃo algumas desvantagens de usar ECS
- Nรฃo tรฃo concretamente definido como outros padrรตes como MVC.
- Difรญcil de aplicar corretamente, fรกcil de usar indevidamente Bons componentes exigem mais reflexรฃo sobre o design
- O ECS requer a escrita de muitos sistemas pequenos que aliteram um nรบmero potencialmente grande de entidades, o que desenvolve o risco de escrever cรณdigo muito ineficiente
- A maioria das pessoas nunca ouviu falar desse padrรฃo.
Exemplo de sistema de componente de entidade
Vejamos o exemplo de um coelho:
Veja a caixa tracejada ao redor desses componentes. Essa รฉ a entidade coelho โ nada mais que um contรชiner de componentes. Vocรช tambรฉm pode definir entidades como uma agregaรงรฃo de qualquer subconjunto de componentes.
Vocรช pode ver a imagem fornecida acima. ร uma das entidades coelhinhas โ nada mais do que um contรชiner de componentes. Vocรช pode definir entidades como uma agregaรงรฃo de qualquer subconjunto de componentes, como Carrot:
Fluxo de dados no ECS:
O comportamento dos sistemas no modelo ECS รฉ a mudanรงa de um estado para outro.
Vamos entender usando este exemplo:
Comportamentos: โUm coelho sentado em uma รกrvore cai devido ร gravidade.โ
Como implementar o comportamento acima?
Vocรช pode fazer isso com um valor z maior que 0, que diminui com o tempo atรฉ 0.
Comportamento: โOs seres vivos envelhecemโ.
Vamos ver como vocรช pode implementar esse comportamento?
Vocรช pode fazer com que os Componentes Vivos tenham valor de idade, que aumenta com o tempo.


