Omniknight

Tipo de Proyecto Proyecto de programación
Software Utilizado Unity
Lenguajes C#
Duración del Proyecto 2 semanas

Acerca de Omniknight

Omniknight es un prototipo de juego que desarrollé como primer proyecto de programación, para mi programa de diseño de videojuegos. Este proyecto me ayudó a aprender muchos conceptos de programación, así como a mantener mi código limpio y modular, ya que nuestro profesor fue muy insistente al respecto. En ese momento quería aprender cómo crear un sistema de combate por turnos sin entrar en una escena de batalla, y eso fue lo que hice. Como es un prototipo, no está muy pulido, especialmente en el aspecto artístico.

Recoger armas y energía

El jugador puede recoger armas y energía para usar en futuras peleas, esto es importante para tener suficientes recursos para ganarlas.

Combates

El jugador tiene 2 acciones de lucha permanentes: ataque normal para causar daño y escudo para prevenirlo. También hay 2 acciones limitadas: usar una gran espada que causa mucho daño o usar un bastón mágico para curarse (limitado por la cantidad de grandes espadas y bastones que lleva el jugador). Cada acción (excepto el ataque normal) consume energía, que se recupera al principio de cada turno y cuando el jugador realiza ataques normales. Matar enemigos otorga +1 en daño y curaciones de forma permanente.

Fight-image

Implementé un sistema de ruta por Waypoints para la patrulla de los enemigos. Cada enemigo tiene una serie de Waypoints que se repiten infinitamente, la variable de acción se puede cambiar de "GO" a "STAY" para que el enemigo se quede en ese punto de ruta durante un cierto período de tiempo. Esta ruta se puede personalizar para cada enemigo desde el inspector de Unity.

Waypoints-enemy Waypoints-inspector

El script de waypoint tiene una máquina de estado que ejecuta el código correspondiente mientras el enemigo patrulla. El override de la función ChangeState permite cambiar fácilmente la animación del enemigo.

Implementé una máquina de estados finitos para la IA del enemigo. Los enemigos persiguen al jugador si están dentro de su rango de detección y se acercan lo suficiente, comenzará una pelea. Pero si el jugador sale del área de persecución, el enemigo volverá a patrullar. También controla los estados de lucha y muerte.

El método RunLogic se llama en cada frame en la función Update del GameController, hacer esto nos permite detener toda la lógica enemiga fácilmente en escenarios como el de entrar en combate.