Ich möchte eine Möglichkeit haben, viele verschiedene Einheiten zu erstellen, ohne Dinge wie MoveTo- und Attack-Aktionen mehr als einmal programmieren zu müssen
So wie ich es sehe, gibt es zwei Möglichkeiten, wie ich das tun kann.
- Eine einzelne generische Unit-Klasse mit Flags, die angeben, was sie kann / nicht kann (dann Instanzen in einem statischen Array erstellen und bei Bedarf abrufen).
- Abstrakte Einheitenklasse mit abstrakten Methoden für einheitenspezifische Aktionen wie (Attack, Harvest, Patrol), die dann alle in den Unterklassen implementiert werden müssen , auch wenn die Einheit eigentlich nichts ernten kann.
Der erste Weg, dies zu tun, scheint der einfachste zu sein, aber ich würde viel Code haben, der für die Mehrheit der Einheiten nicht verwendet wird.
der zweite weg könnte auch funktionieren. Aber wenn ich mich für zwei verschiedene Einheiten entscheide, die Ressourcen ernten können, werde ich genau den gleichen Code in zwei verschiedenen Klassen haben, was nicht der richtige Weg zu sein scheint.
Ist das überhaupt der richtige Ansatz für dieses Problem?
In einem Spiel wie AoE hat jede Einheit, was ich annehme, eine Art Liste von Aktionen / Befehlen. Ich würde wirklich gerne wissen, wie man etwas Ähnliches erreicht, bei dem ich jede Aktion / Befehl nur einmal codieren kann und Geben Sie es dann allen Einheiten, die diese Aktion benötigen.
Wenn ich unklar bin (sehr plausibel) oder Sie weitere Informationen benötigen, was genau ich suche, fragen Sie mich einfach in einem Kommentar.
quelle
gameObject.AddComponent
und tungameObject.RemoveComponent
.Moving
Komponente bedeutet "diese Einheit ist im Allgemeinen beweglich". Die Komponente ist permanent daran befestigt, unabhängig davon, ob sich das Gerät bewegt oder nicht. Es bedeutet nicht , dass es sich bewegt jetzt . Sie können dies jedoch auch auf diese Weise tun, indem Sie eineMoveOrder
Komponente hinzufügen und diese Komponente von der Einheit entfernen, wenn die Bestellung ausgeführt oder storniert wird.Viele Spiele verwenden ein komponentenbasiertes System für Entitäten , bei dem eine Reihe von Verhaltensweisen und Fähigkeiten zu einem allgemeineren Einheitentyp hinzugefügt werden können, anstatt als Teil der Klasse (oder eines Äquivalents) der Entität codiert zu werden.
quelle
Unity
Flagge hat. Unity verfügt bereits über ein integriertes Komponentensystem und bevorzugt die Komposition gegenüber der Vererbung . Eine einfache Methode wäre, eineMonoBehaviour
für jeden Ihrer Aktionstypen zu erstellen und dann an jeden Einheitentyp die Aktionen anzuhängen, die er ausführen kann (Anpassen der Aktionsinstanzen mit typspezifischen Details wie Schadenswerten und Kosten). Auf diese Weise bleibt die Datenerstellung Ihrer Einheit abhängig, sodass Sie auf einfache Weise viele benutzerdefinierte Einheitentypen erstellen können.