Programación de Lógica de Armas en Realidad Virtual

Clase 13 de 33Curso de VR con Unity

Resumen

Consolida la lógica de combate en Unity VR con un enfoque claro y escalable. Aquí verás cómo estructurar un script central para armas, configurar referencias en el Inspector y preparar variables de control como cooldown, posiciones de manos y activación del escudo. Todo se integra sobre el Vive Camera Rig y un objeto hijo Player para mantener orden y flexibilidad.

¿Cómo organizar la escena y los scripts para VR?

Crear una carpeta dedicada a Scripts simplifica el mantenimiento y evita perder archivos. El script principal se llama Weapons y se asigna a un objeto hijo llamado Player dentro del Vive Camera Rig, con la etiqueta de jugador para referenciarlo desde otros scripts.

  • Crea la carpeta Scripts y el script Weapons.
  • Añade un objeto vacío hijo de Vive Camera Rig llamado Player.
  • Asigna al Player la etiqueta de jugador.
  • Arrastra el script Weapons al Player para centralizar la lógica de armas.
  • Renombra los objetos del inventario: espada, staff (vara) y escudo para localizarlos rápido.

¿Qué variables y estructuras controlan manos, armas y magia?

La base es controlar manos, armas equipables y tiempos de espera. Se referencian las manos como GameObjects, se almacenan las últimas posiciones con Vector3 para calcular direcciones de disparo, y se definen cooldowns con constantes. El escudo se activa con una variable booleana para una lectura más directa del estado.

using UnityEngine;

public class Weapons : MonoBehaviour
{
    public GameObject rightHand;
    public GameObject leftHand;

    private Vector3 lastPositionRight;
    private Vector3 lastPositionLeft;

    public GameObject rightWeapon;
    public GameObject leftWeapon;
    public GameObject rightWeaponAlt;

    public GameObject magicLaunchPoint;
    public GameObject fireMagic;

    public float weaponCooldown = 0f;
    public float magicCooldown = 0f;

    public const float weaponCooldownTime = 0.5f; // medio segundo
    public const float magicCooldownTime = 2f;    // dos segundos

    public bool shieldActive = false;
}
  • Manos: referencias a rightHand y leftHand para saber dónde están los controladores.
  • Dirección de disparo: con lastPositionRight/Left y la posición actual se calcula el vector de salida de la bola de fuego.
  • Armas: rightWeapon, leftWeapon y rightWeaponAlt permiten alternar entre espada, escudo y vara.
  • Magia: fire magic como prefab independiente para sumar otras magias en el futuro.
  • Punto de lanzamiento: magic launch point ubica el origen del disparo en la punta del staff.
  • Tiempos: weaponCooldown y magicCooldown se acumulan con el tiempo; las constantes definen el umbral para evitar cambios instantáneos.
  • Escudo: shieldActive indica si el escudo está activo mientras se mantiene el gatillo.

¿Por qué usar cooldown y una variable booleana para el escudo?

  • Para armas: el weapon cooldown evita alternancias rápidas al mantener pulsado el botón. Se sugiere 0.5 s entre cambios.
  • Para magia: el magic cooldown regula la cadencia. Se sugiere 2 s entre invocaciones.
  • Para escudo: un booleano como shieldActive refleja de forma simple si está levantado mientras se pulsa el gatillo del controlador.

¿Cómo se configuran las referencias en el inspector?

Tras compilar, en el Player aparecerán todas las variables públicas listas para vincular. La configuración correcta garantiza que armas y magia respondan en el lugar adecuado.

  • Arrastra la mano derecha e izquierda desde la jerarquía del Vive Camera Rig a rightHand y leftHand.
  • Asigna la espada a rightWeapon.
  • Asigna el escudo a leftWeapon.
  • Asigna la vara (staff) a rightWeaponAlt.
  • Crea un objeto vacío en la punta del staff (cabeza de la calavera) para el magic spot y asígnalo a magicLaunchPoint.
  • Deja fireMagic pendiente si aún no existe el prefab de la magia de fuego.

Este enfoque te prepara para añadir más magias, alternar armas con control y mejorar la interacción en realidad virtual. ¿Qué arma o efecto mágico te gustaría integrar a continuación? Comparte tus ideas y dudas en los comentarios.