Je veux un moyen de faire beaucoup d'unités différentes sans avoir à programmer plusieurs fois des actions comme moveTo et Attack
La façon dont je le vois, il y a 2 façons de le faire.
- Une seule classe Unit générique avec des indicateurs qui spécifie ce qu'elle peut / ne peut pas faire (puis créez des instances dans un tableau statique et récupérez-les si nécessaire)
- Classe d'unité abstraite avec des méthodes abstraites pour des actions spécifiques à l'unité comme (Attaque, Récolte, Patrouille), qui doivent ensuite toutes être implémentées dans les sous - classes , même si l'unité ne peut réellement rien récolter.
la première façon de le faire semble la plus simple, mais je finirais par avoir beaucoup de code inutilisé pour la majorité des unités.
la deuxième façon pourrait également fonctionner. Mais si je décide d'avoir deux unités différentes qui peuvent récolter des ressources, je vais avoir exactement le même code dans deux classes différentes, ce qui ne semble pas être la bonne façon de le faire.
Est-ce même la bonne approche à ce problème?
Dans un jeu comme AoE, chaque unité a, ce que je suppose, une sorte de liste d'actions / ordres, j'aimerais vraiment savoir comment réaliser quelque chose de similaire, où je peux simplement coder chaque action / ordre une fois, et donnez-le ensuite à toutes les unités qui ont besoin de cette action.
Si je ne suis pas clair (très plausible) ou si vous avez besoin de plus d'informations sur ce que je recherche exactement, demandez-le moi dans un commentaire.
la source
gameObject.AddComponent
etgameObject.RemoveComponent
.Moving
composant signifie "cette unité est généralement capable de se déplacer". Le composant y est fixé en permanence, que l'unité se déplace ou non. Cela ne signifie pas qu'il bouge en ce moment . Bien que vous puissiez également le faire de cette façon en y ajoutant unMoveOrder
composant et en le faisant retirer de l'unité lorsque la commande est exécutée ou annulée.De nombreux jeux utilisent un système basé sur les composants pour les entités, c'est-à-dire qu'un tas de comportements et de capacités peuvent être ajoutés à un type d'unité plus générique plutôt que d'être codés dans le cadre de la classe de l'entité (ou équivalent).
la source
Unity
drapeau. Unity possède déjà un système de composants intégré et privilégie fortement la composition plutôt que l'héritage . Une méthode simple consiste à créer unMonoBehaviour
pour chacun de vos types d'action, puis à attacher à chaque type d'unité préfabriqué les actions qu'il peut effectuer (personnalisation des instances d'action avec des détails par type comme les valeurs des dommages et les coûts). Cela permet à votre unité de créer des données basées sur les données, de sorte que vous pouvez facilement créer de nombreux types d'unités personnalisés.