Contenido del Curso
Juego de Lucha en Unity
Juego de Lucha en Unity
Enviar Proyectil
csharp
La clase Projectile
es responsable de gestionar el comportamiento de los proyectiles que el enemigo puede lanzar al jugador. Esta clase se encarga de configurar la dirección y velocidad del proyectil, actualizar su movimiento y gestionar las colisiones.
Método Setup
csharp
Propósito: Este método configura el estado inicial del proyectil.
Parámetros: Recibe un parámetro Vector2 direction
para establecer la dirección en la que viajará el proyectil.
Acciones: Establece la dirección del proyectil, obtiene el componente Rigidbody2D
adjunto al proyectil, rota el proyectil para que apunte en la dirección en la que viajará y programa la destrucción del proyectil después de 6 segundos para evitar que exista indefinidamente.
Método Update
csharp
Propósito: Este método actualiza el movimiento del proyectil.
Acciones: Establece la velocidad del Rigidbody2D
para mover el proyectil en la dirección especificada a la velocidad indicada.
Método OnTriggerEnter2D
csharp
Propósito: Este método gestiona las colisiones con otros objetos.
Parámetros: Recibe un parámetro Collider2D collision
para detectar colisiones.
Acciones: Registra el nombre del objeto con el que colisionó el proyectil, verifica si el proyectil colisionó con un objeto etiquetado como "Player" y, si el objeto tiene un componente que implementa la interfaz IGetAttacked
, llama al método GetAttacked
en ese componente para infligir daño. Finalmente, destruye el proyectil después de impactar al jugador.
Por Qué Lo Hicimos Así
Modular y reutilizable: La clase Projectile
está diseñada para ser modular y reutilizable para cualquier tipo de proyectil que el enemigo pueda usar. Al establecer la dirección y la velocidad, se pueden crear varios proyectiles con diferentes comportamientos.
Gestión eficiente del movimiento: Utilizar el componente Rigidbody2D
para el movimiento garantiza que el proyectil se comporte de acuerdo con el sistema de físicas de Unity, proporcionando un movimiento fluido y realista.
Detección de colisiones y gestión de daño: El método OnTriggerEnter2D
asegura que el proyectil pueda detectar colisiones con el jugador y aplicar daño de manera adecuada, haciendo efectiva la interacción entre el proyectil y el jugador.
Clase SendProjectileState
csharp
La clase SendProjectileState
es un estado específico que gestiona el comportamiento del enemigo cuando lanza un proyectil. Esta clase hereda de la clase State
e incluye métodos para iniciar, finalizar e iniciar la acción de ataque con proyectil.
Constructor
El constructor inicializa SendProjectileState
con un Animator
para las animaciones y una acción para enviar el proyectil. Asigna estos valores a las variables miembro correspondientes.
Método StartState
Este método establece isStateFinished
en false
y activa la animación del proyectil configurando el parámetro booleano "projectil" en el animador a true
.
Método StartAction
Este método llama a sendProjectileFunc
, que ejecuta la acción definida para enviar el proyectil. Este método suele ser invocado por un evento del animador para sincronizar el lanzamiento del proyectil con la animación.
Método EndState
Este método detiene la animación del proyectil configurando el parámetro booleano "projectil" en el animador a false
.
Por qué lo hicimos de esta manera
Modular y reutilizable:
La clase SendProjectileState
está diseñada para ser modular, permitiendo la integración flexible de diferentes comportamientos de envío de proyectiles mediante el uso de System.Action
.
Integración con animaciones: Al utilizar parámetros del animador, el estado garantiza que el lanzamiento del proyectil esté sincronizado con la animación correspondiente, proporcionando una experiencia fluida y realista.
Función Send Projectile
csharp
El método SendProjectile
es responsable de crear y lanzar un proyectil hacia el jugador. Este método calcula la dirección desde el enemigo hacia el jugador, instancia el proyectil y lo configura para que se desplace en la dirección calculada.
Definición del método y componentes
Definición del método:
void SendProjectile()
: Este método no retorna ningún valor y está diseñado para gestionar el lanzamiento del proyectil.
Componentes:
Vector2 direction = (player.position - transform.position).normalized;
Esta línea calcula la dirección desde el enemigo hacia el jugador restando la posición del enemigo de la posición del jugador. La parte .normalized
asegura que el vector de dirección tenga una longitud de 1, convirtiéndolo en un vector unitario que solo indica la dirección.
Instantiate(projectile, projectileSendingPosition.position, Quaternion.identity).Setup(direction);
Esta línea crea una nueva instancia del proyectil en la posición especificada (projectileSendingPosition.position
) sin rotación (Quaternion.identity
). El método Setup
se llama en el proyectil instanciado para establecer su dirección.
Vinculación con el Animator de Unity
Estamos llamando a la función StartAction
utilizando eventos del animator. Esto nos permite especificar el fotograma exacto dentro de la animación del enemigo en el que queremos que se envíe el proyectil. Dado que la animación consta de muchos fotogramas, es importante identificar el momento preciso para que ocurra esta acción.
¡Gracias por tus comentarios!