Disparo de bola de fuego en VR
Clase 17 de 33 • Curso de VR con Unity
Contenido del curso
Creando nuestro mundo 3D en Unity
- 6

Crear terreno 3D en Unity con Standard Assets
08:42 min - 7

Creación de Escenarios en Unity: Terreno y Erosión Realista
10:19 min - 8

Texturización de terrenos en Unity: creación de entornos realistas
10:56 min - 9

Cómo pintar árboles en Unity para VR
06:54 min - 10

Añadir césped y efectos de viento en Unity 3D
06:57 min - 11

Configurar skybox de seis lados en Unity
06:53 min - 12

Integración de Armas y Escudo en Realidad Virtual con HTC Vive
12:09 min
El realismo del VR: Programando a nuestro personaje
- 13

Programación de Lógica de Armas en Realidad Virtual
10:22 min - 14

Mapeado de controles HTC Vive en Unity
10:08 min - 15

Controles VR: grip y gatillo en Unity
10:02 min - 16

Configuración de Bolas de Fuego en Unity para Realidad Virtual
09:21 min - 17

Disparo de bola de fuego en VR
Viendo ahora - 18

Corrección de bugs: recarga y audio en armas Unity
04:44 min - 19

Colliders y Rigidbody en el diseño de personajes y armas en Unity
08:25 min - 20

Sistema de vida reutilizable en Unity
05:23 min
El realismo del VR: Creación de HUD (Heads Up Display) y generando enemigos
- 21

HUD en VR: canvas anclado a cámara
08:50 min - 22

Configuración de Barras de Vida y Maná en Unity
05:54 min - 23

Programación de Daño en Videojuegos: Lógica de Armas y Magia
11:07 min - 24

Slider Unity: vida y maná en un script
08:00 min - 25

Cómo configurar un dragón enemigo en Unity
11:40 min - 26

Colliders y barras de vida para dragones
08:31 min - 27

Animaciones de Muerte y Desaparición de Enemigos en Unity
10:01 min - 28

Cómo crear oleadas de dragones con portal
11:24 min
El realismo del VR: Programando la IA de nuestro juego
Domina el disparo de una bola de fuego desde la vara en Unity con un flujo claro: carga automática en la punta, verificación de cooldown, cálculo de fuerza según el movimiento de la mano, desacople del padre, físicas con impulso y cambio de audio en el disparo. Todo pensado para que la mecánica se sienta potente y consistente.
¿Cómo se carga y se dispara la magia con cooldown?
Al equipar la vara, se instancia la bola de fuego en el Magic launch point de la punta. El disparo se realiza con el trigger derecho solo si el magic cooldown supera el magic cooldown time de 2 segundos. Antes de disparar se valida que exista current magic para evitar errores.
- Instanciar la magia en el Magic launch point de la vara.
- Verificar que current magic no sea nulo antes de disparar.
- Controlar magic cooldown y compararlo con magic cooldown time de 2 s.
- Disparar al pulsar el trigger derecho cuando el cooldown lo permita.
- Reiniciar el cooldown a cero tras el disparo.
¿Cómo se calcula la dirección y la fuerza del lanzamiento?
Se rastrea la mano derecha para obtener una velocidad de lanzamiento realista. Se guardan las posiciones previas y actuales de ambas manos con last position right y last position left, actualizándolas al final de Update. La dirección y fuerza salen de la diferencia de posiciones dividida por Time.deltaTime.
- Actualizar al final de Update: última posición de mano derecha e izquierda.
- Calcular velocidad: espacio/tiempo con la posición actual menos la anterior.
- Escalar la fuerza multiplicando el vector por 20, 50 o 100 si es necesario.
- Conseguir un lanzamiento largo y visible, no dependiente solo de la fuerza real del usuario.
Ejemplo del cálculo en C#:
// Al final de Update: lastPositionRight = rightHand.transform.position; lastPositionLeft = leftHand.transform.position; // Al disparar: Vector3 force = (rightHand.transform.position - lastPositionRight) / Time.deltaTime; force *= 20f; // ajustar a 50f o 100f si hace falta más alcance
¿Cómo se desacopla la bala y se aplican físicas y audio?
Antes de aplicar la fuerza, la bola de fuego debe dejar de ser hija de la vara. Luego se eliminan las constraints del Rigidbody y se aplica la fuerza como impulso. Finalmente, se cambia el sonido: de un fuego ambiente en la punta a un disparo potente con PlayOneShot.
- Desacoplar el padre:
currentMagic.transform.parent = null. - Quitar restricciones:
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.None. - Aplicar fuerza instantánea:
AddForce(force, ForceMode.Impulse). - Dejar que la gravedad actúe tras el impulso para una trayectoria natural.
- Cambiar el audio de ambiente a disparo con PlayOneShot.
// Desacoplar y liberar físicas currentMagic.transform.parent = null; var rb = currentMagic.GetComponent<Rigidbody>(); rb.constraints = RigidbodyConstraints.None; rb.AddForce(force, ForceMode.Impulse); // Audio de disparo var audio = currentMagic.GetComponent<AudioSource>(); AudioClip clip = Resources.Load<AudioClip>("audio/fire shoot seis"); audio.PlayOneShot(clip);
¿Qué implica usar impulso en lugar de fuerza continua?
- Impulso: toda la fuerza en un instante para un “efecto cañonazo”.
- Fuerza continua: empuje sostenido que acelera la bola durante un tiempo.
- En este caso conviene el impulso para un disparo inmediato y contundente.
Habilidades y conceptos reforzados:
- Gestión de cooldowns para equilibrar el juego: intervalo de 2 s.
- Cálculo de velocidad con posiciones consecutivas y Time.deltaTime.
- Control de jerarquías en escena: separar padre e hijo antes de aplicar físicas.
- Dominio de Rigidbody y constraints para liberar movimiento.
- Uso de AddForce con ForceMode.Impulse para aplicar fuerza instantánea.
- Audio reactivo con AudioSource.PlayOneShot y carga con Resources.Load.
¿Te gustaría que revisemos juntos por qué la vara no se recarga tras el primer disparo y cómo depurarlo paso a paso?