Mapeado de controles HTC Vive en Unity

Clase 14 de 33Curso de VR con Unity

Resumen

Optimiza el sistema de armas en VR con una base sólida en Unity: desactiva modelos duplicados, mapea ejes de HTC Vive con Input.GetAxis y controla tiempos con Time.deltaTime. Con un umbral del 10 % en los gatillos y agarres, podrás alternar entre espada y vara, cubrirte con el escudo y disparar magia de fuego con precisión.

¿Cómo se corrige el bug de visualización inicial?

Para evitar que se muestren a la vez la espada y la vara en la mano derecha, se desactiva el modelo alternativo al iniciar. La clave: en Start, llamar a SetActive(false) sobre el objeto del arma alternativa derecha.

  • Dos modelos visibles a la vez causan solapamiento visual.
  • Solución simple con una línea en Start.
  • Se desactiva el arma alternativa del brazo derecho.
void Start()
{
    // Desactivar arma alternativa derecha al iniciar
    rightWeaponAlternative.SetActive(false);
}

¿Qué implica la activación/desactivación de modelos?

  • Control visual inmediato sin destruir objetos.
  • Permite alternar entre espada y vara sin coste extra.
  • Deja la base lista para futuras magias: agua, hielo u otras.

¿Cómo se mapean los controles de HTC Vive en Unity?

Desde Edit > Project Settings > Input, el plugin de HTC Vive expone ocho ejes: cuatro para la izquierda y cuatro para la derecha. Se usan el trackpad horizontal y vertical, el trigger (gatillo) y el grip (agarre). Con Input.GetAxis se lee un valor analógico [0..1], ideal para fijar un umbral de activación, por ejemplo 0,1.

  • Ejes con gravedad, sensibilidad y zona muerta preconfiguradas.
  • Umbral sugerido: 0,1 para evitar falsos positivos por vibración.
  • Acciones clave: cubrir con escudo, disparar magia, cambiar arma, mostrar/ocultar escudo.
void Update()
{
    if (Input.GetAxis("HTC view left trigger") > 0.1f)
    {
        // TODO: cubrirnos con el escudo.
    }

    if (Input.GetAxis("HTC view right trigger") > 0.1f)
    {
        // TODO: disparar fuego si la vara está seleccionada.
    }

    if (Input.GetAxis("HTC view left grip") > 0.1f)
    {
        // TODO: mostrar/ocultar el escudo.
    }

    if (Input.GetAxis("HTC view right grip") > 0.1f)
    {
        // TODO: cambiar entre espada y vara.
    }
}

¿Por qué usar get axis y umbrales?

  • Lectura analógica: de 0 a 1 según presión del trigger o grip.
  • Mejora la precisión: evita activar con toques ligeros.
  • Escenarios típicos: disparo progresivo, aceleración/freno, apuntado fino.

¿Qué entradas están disponibles y para qué sirven?

  • Trackpad horizontal: desplazamiento lateral o selección radial.
  • Trackpad vertical: navegación vertical o selección contextual.
  • Trigger izquierdo: cubrirse con el escudo.
  • Trigger derecho: disparar magia de fuego con la vara.
  • Grip izquierdo: mostrar/ocultar escudo.
  • Grip derecho: alternar espada y vara.

¿Cómo se gestionan los tiempos con cooldown y delta time?

Se crean dos temporizadores: weaponCooldown y magicCooldown. En Update, ambos se incrementan con Time.deltaTime. Así se mide el tiempo transcurrido desde la última acción para bloquear repeticiones instantáneas y asegurar cadencia.

  • Delta time: tiempo entre frames, base para medir acciones en tiempo real.
  • Control de ritmo: cambio de arma y lanzamiento de magia con espera mínima.
  • Reinicio del contador a 0 al ejecutar una acción.
void Update()
{
    weaponCooldown += Time.deltaTime;
    magicCooldown  += Time.deltaTime;

    // Cuando ocurra una acción:
    // weaponCooldown = 0f;   // p. ej., al cambiar de arma.
    // magicCooldown  = 0f;   // p. ej., al lanzar magia.
}

¿Qué acciones reinician los cooldowns?

  • Cambiar entre espada y vara.
  • Mostrar u ocultar el escudo.
  • Disparar magia de fuego con la vara.
  • Ejecutar un ataque con el arma asignada.

¿Te gustaría que preparemos los bloques TODO con validaciones, efectos y feedback háptico? Cuéntame qué acción quieres implementar primero y en qué cooldown debería apoyarse.