Chcę stworzyć wiele różnych jednostek bez konieczności programowania rzeczy takich jak moveTo i Attack więcej niż raz
Z mojego punktu widzenia mogę to zrobić na 2 sposoby.
- Pojedyncza ogólna klasa Unit z flagami, która określa, co może / nie może zrobić (następnie tworzy instancje w tablicy statycznej i pobiera je w razie potrzeby)
- Klasa abstrakcyjna jednostki z abstrakcyjnymi metodami dla akcji specyficznych dla Jednostki, takich jak (Atak, Żniwa, Patrol), które następnie muszą zostać zaimplementowane w podklasach , nawet jeśli jednostka nie jest w stanie niczego zebrać.
pierwszy sposób na zrobienie tego wydaje się najprostszy, ale w końcu większość jednostek nie byłaby używana.
drugi sposób może również działać. Ale jeśli zdecyduję się na dwie różne jednostki, które mogą zbierać zasoby, będę miał dokładnie ten sam kod w dwóch różnych klasach, co nie wydaje się być właściwym sposobem na zrobienie tego.
Czy to jest właściwe podejście do tego problemu?
W grze takiej jak obszar, każda jednostka ma, jak przypuszczam, jakąś Listę Akcji / Rozkazów, naprawdę chciałbym wiedzieć, jak osiągnąć coś podobnego do tego, gdzie mogę po prostu kodować każdą Akcję / Rozkaz raz, i następnie daj je wszystkim jednostkom, które potrzebują wspomnianej Akcji.
Jeśli jestem niejasny (wysoce prawdopodobne) lub potrzebujesz więcej informacji na temat tego, czego dokładnie szukam, po prostu zapytaj mnie w komentarzu.
źródło
gameObject.AddComponent
igameObject.RemoveComponent
.Moving
środki składnik „to urządzenie jest na ogół zdolna do przemieszczania”. Komponent jest na stałe do niego przymocowany, niezależnie od tego, czy jednostka się porusza, czy nie. To nie znaczy, że teraz się porusza . Chociaż można to również zrobić w ten sposób, dodającMoveOrder
do niego komponent i usuwając go z jednostki, gdy zamówienie zostanie zrealizowane lub anulowane.Wiele gier korzysta z systemu opartego na komponentach dla bytów, w którym wiązka zachowań i umiejętności może być dodana do bardziej ogólnego typu jednostki, a nie kodowana jako część klasy bytu (lub równoważnego).
źródło
Unity
flagę. Unity ma już wbudowany system komponentów i zdecydowanie preferuje kompozycję zamiast dziedziczenia . Jedną z prostych metod byłoby utworzenieMonoBehaviour
dla każdego rodzaju akcji, a następnie dołączenie do każdego typu jednostki prefabrykuj działania, które jest ona w stanie wykonać (dostosowując instancje akcji za pomocą szczegółów poszczególnych rodzajów, takich jak wartości obrażeń i koszty). Dzięki temu tworzenie jednostek zależy od danych, dzięki czemu można łatwo tworzyć wiele niestandardowych typów jednostek.