Eu quero uma maneira de criar muitas unidades diferentes sem precisar programar coisas como as ações moveTo e Attack mais de uma vez
Do jeito que eu vejo, existem 2 maneiras de fazer isso.
- Uma única classe de unidade genérica com sinalizadores que especifica o que pode / não pode fazer (crie instâncias em uma matriz estática e agarre-as quando necessário)
- Classe de unidade abstrata com métodos abstratos para ações específicas da unidade, como (Ataque, Colheita, Patrulha), que precisam ser implementadas nas subclasses , mesmo que a unidade não possa realmente coletar nada.
a primeira maneira de fazer isso parece a mais simples, mas eu acabaria tendo um monte de código não sendo usado para a maioria das unidades.
a segunda maneira também poderia funcionar. Mas se eu decidir ter duas unidades diferentes que podem coletar recursos, terei exatamente o mesmo código em duas classes diferentes, o que não parece ser o caminho certo para fazê-lo.
Essa é a abordagem correta para esse problema?
Em um jogo como AoE, todas as unidades têm, o que eu presumo, algum tipo de lista de ações / ordens, eu realmente gostaria de saber como obter algo semelhante a esse, onde eu possa apenas codificar cada ação / ordem uma vez, e depois, entregue-o a todas as unidades que precisam da referida ação.
Se não estiver claro (altamente plausível) ou se precisar de mais informações sobre o que exatamente estou procurando, pergunte-me em um comentário.
fonte
gameObject.AddComponent
egameObject.RemoveComponent
.Moving
componente significa "esta unidade geralmente é capaz de se mover". O componente está permanentemente conectado a ele, independentemente de a unidade estar em movimento ou não. Isso não significa que está se movendo agora . Embora você também possa fazer isso dessa maneira, adicione umMoveOrder
componente a ele e faça com que esse componente se remova da unidade quando o pedido for atendido ou cancelado.Muitos jogos usam um sistema baseado em componentes para entidades, onde é possível adicionar vários comportamentos e habilidades a um tipo de unidade mais genérico, em vez de ser codificado como parte da classe da entidade (ou equivalente).
fonte
Unity
bandeira. O Unity já possui um sistema de componentes embutido e favorece fortemente a composição sobre a herança . Um método simples seria criar umMonoBehaviour
para cada tipo de ação e anexar a cada tipo de unidade pré-fabricada as ações que ele pode executar (personalizar as instâncias de ação com detalhes por tipo, como valores e custos de danos). Isso mantém a criação da sua unidade orientada por dados, para que você possa criar facilmente muitos tipos de unidades personalizadas.