Je veux faire un appareil photo à la première personne qui tourne avec la souris.
J'ai regardé la page API Input.GetAxis Scripting et trouvé un exemple de code, que j'ai inclus au bas de mon message. En l'essayant, j'ai réalisé que bien qu'il ait les mêmes fonctionnalités de base que j'espérais, il ne maintient pas la caméra parallèle au plan xz, en particulier lorsque vous déplacez la souris en cercles. Au bout d'un moment, la caméra serait à un angle étrange et le joueur serait complètement décomposé!
Existe-t-il une solution rapide à ce code qui restreindrait en quelque sorte le mouvement de la caméra, ou existe-t-il une meilleure façon de faire pivoter la caméra?
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);
}
}
Réponses:
Le problème est que vous mettez à jour la rotation existante au lieu de la suivre vous-même et de la remplacer à chaque mise à jour.
Lorsque vous mettez à jour la rotation, elle combine votre nouvelle rotation avec l'ancienne, ce qui entraîne un comportement inattendu.
La solution est de garder une trace de votre rotation accumulée et de réinitialiser entièrement la rotation à chaque mise à jour avec vos nouvelles valeurs.
C'est à cause de cela, j'ai trouvé la réponse ici: Réponses Unity: comment verrouiller ou régler les caméras sur la rotation z à zéro
Code de travail:
Différences clés:
la source
Que se passe-t-il si vous faites de l'enfant caméra d'un objet de jeu vide. Ensuite, avec un script, vous gérez la rotation de l'objet de jeu vide par rapport au vecteur UP. (MouseX) Avec un autre script attaché à l'objet de jeu de la caméra, vous gérez la rotation par rapport au vecteur Right (MouseY)
la source