Quiero una manera de hacer muchas unidades diferentes sin tener que programar cosas como moveTo y Attack más de una vez
A mi modo de ver, hay 2 formas en que puedo hacer esto.
- Una única clase de Unidad genérica con banderas que especifica lo que puede / no puede hacer (luego cree instancias en una matriz estática y agárrelas cuando sea necesario)
- Clase de unidad abstracta con métodos abstractos para acciones específicas de la Unidad como (Ataque, Cosecha, Patrulla), que luego deben implementarse en las subclases , incluso si la unidad no puede cosechar nada.
La primera forma de hacer esto parece la más simple, pero terminaría teniendo una gran cantidad de código sin usar para la mayoría de las unidades.
la segunda forma también podría funcionar. Pero si decido tener dos unidades diferentes que puedan recolectar recursos, tendré exactamente el mismo código en dos clases diferentes, lo que no parece ser la forma correcta de hacerlo.
¿Es este incluso el enfoque correcto para este problema?
En un juego como AoE, cada unidad tiene, lo que supongo es, algún tipo de Lista de Acciones / Órdenes, realmente me gustaría saber cómo lograr algo similar a eso, donde puedo codificar cada Acción / Orden una vez, y luego dáselo a todas las unidades que necesiten dicha Acción.
Si no estoy claro (muy plausible) o si necesita más información sobre lo que estoy buscando exactamente, solo pregúnteme en un comentario.
fuente
gameObject.AddComponent
ygameObject.RemoveComponent
.Moving
componente significa que "esta unidad es generalmente capaz de moverse". El componente está permanentemente conectado a él, independientemente de si la unidad se está moviendo o no. No significa que se esté moviendo en este momento . Aunque también podría hacerlo de esta manera agregando unMoveOrder
componente y haciendo que ese componente se retire de la unidad cuando se complete o cancele el pedido.Muchos juegos usan un sistema basado en componentes para entidades, que es donde se pueden agregar un montón de comportamientos y habilidades a un tipo de unidad más genérico en lugar de codificarse como parte de la clase de la entidad (o equivalente).
fuente
Unity
bandera. Unity ya tiene un sistema de componentes incorporado y favorece fuertemente la composición sobre la herencia . Un método sencillo sería crear unMonoBehaviour
para cada uno de sus tipos de acción, luego adjuntar a cada tipo de unidad prefabricadas las acciones que puede realizar (personalizando las instancias de acción con detalles por tipo como valores de daño y costos). Esto mantiene la creación de su unidad basada en datos, por lo que puede crear fácilmente muchos tipos de unidades personalizadas.