Quiero hacer una cámara en primera persona que gire con el mouse.
Miré la página API de scripts de Input.GetAxis y encontré un código de muestra, que he incluido al final de mi publicación. Al probarlo, me di cuenta de que, aunque tiene la misma funcionalidad básica que esperaba que tuviera, no mantiene la cámara paralela al plano xz, especialmente al mover el mouse en círculos. Después de un tiempo, la cámara estaría en un ángulo extraño, ¡y el jugador estaría completamente descombobulado!
¿Existe una solución rápida para este código que restringiría el movimiento de la cámara de alguna manera, o hay una mejor manera de rotar la cámara?
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float horizontalSpeed = 2.0F;
public float verticalSpeed = 2.0F;
void Update() {
float h = horizontalSpeed * Input.GetAxis("Mouse X");
float v = verticalSpeed * Input.GetAxis("Mouse Y");
transform.Rotate(v, h, 0);
}
}
Respuestas:
El problema es que está actualizando la rotación existente en lugar de rastrearla usted mismo y reemplazarla en cada actualización.
Cuando actualiza la rotación, combina su nueva rotación con la anterior, lo que conduce a un comportamiento inesperado.
La solución es realizar un seguimiento de su rotación acumulada y restablecer la rotación por completo cada actualización con sus nuevos valores.
Crédito debido, encontré la respuesta aquí: Respuestas de Unity: cómo-bloquear-o-configurar-las-cámaras-z-rotación-a-cero
Código de trabajo
Diferencias clave
fuente
¿Qué pasa si haces que la cámara sea hija de un objeto de juego vacío? Luego, con un script, administra la rotación del objeto del juego vacío en relación con el vector UP. (MouseX) Con otro script conectado al objeto del juego de la cámara, administra la rotación en relación con el vector Right (MouseY)
fuente