Quero fazer uma câmera em primeira pessoa que gire com o mouse.
Eu olhei para a página da API de script Input.GetAxis e encontrei um código de exemplo, que eu incluí na parte inferior da minha postagem. Ao experimentar, percebi que, embora tenha a mesma funcionalidade básica que esperava, ela não mantém a câmera paralela ao plano xz, principalmente ao mover o mouse em círculos. Depois de um tempo, a câmera estaria em um ângulo estranho e o jogador ficaria completamente desconcertado!
Existe uma solução rápida para esse código que restringiria o movimento da câmera de alguma forma ou existe uma maneira melhor de girar a câmera?
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);
}
}
Respostas:
O problema é que você está atualizando a rotação existente em vez de rastreá-la e substituí-la a cada atualização.
Quando você atualiza a rotação, ela combina sua nova rotação com a antiga, o que leva a um comportamento inesperado.
A solução é acompanhar sua rotação acumulada e redefinir completamente a rotação a cada atualização com seus novos valores.
Com o crédito vencido, encontrei a resposta aqui: Unity Answers: como bloquear ou configurar as câmeras-z-rotação-zero
Código de trabalho:
Principais diferenças:
fonte
E se você tornar a câmera filha de um objeto de jogo vazio. Em seguida, com um script, você gerencia a rotação do objeto de jogo vazio em relação ao vetor UP. (MouseX) Com outro script anexado ao objeto da câmera, você gerencia a rotação em relação ao vetor Right (MouseY)
fonte