Chcę zrobić aparat z widokiem pierwszej osoby, który obraca się za pomocą myszy.
Spojrzałem na stronę API Input.GetAxis Scripting API i znalazłem przykładowy kod, który zamieściłem na dole mojego postu. Po wypróbowaniu, zdałem sobie sprawę, że chociaż ma tę samą podstawową funkcjonalność, na którą liczyłem, nie utrzyma kamery równolegle do płaszczyzny xz, szczególnie podczas poruszania myszą w kółko. Po chwili kamera byłaby pod dziwnym kątem, a gracz byłby całkowicie rozczłonkowany!
Czy istnieje szybki sposób naprawienia tego kodu, który w jakiś sposób ograniczy ruch aparatu, czy jest lepszy sposób na obrócenie aparatu?
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);
}
}
Odpowiedzi:
Problem polega na tym, że aktualizujesz istniejącą rotację zamiast ją śledzić i zastępujesz każdą aktualizacją.
Po zaktualizowaniu obrotu łączy on nowy obrót ze starym, co prowadzi do nieoczekiwanego zachowania.
Rozwiązaniem jest śledzenie skumulowanego obrotu i resetowanie obrotu całkowicie przy każdej aktualizacji z nowymi wartościami.
Kredyt gdzie należny, znalazłem odpowiedź tutaj: Unity Answers: how-to-lock-or-set-the-cameras-z-rotation-to-zero
Kod roboczy:
Kluczowe różnice:
źródło
Co się stanie, jeśli uczynisz kamerę dzieckiem pustym przedmiotem gry. Następnie za pomocą jednego skryptu zarządzasz pustym obrotem obiektu gry względem wektora UP. (MouseX) Za pomocą innego skryptu dołączonego do obiektu gry kamery zarządzasz rotacją względem wektora prawego (MouseY)
źródło