Ich versuche, die Position und Drehung der Hauptkamera mit der Leertaste zu ändern. Zum Ändern der Position habe ich keine Probleme, finde aber Probleme beim Drehen der Kamera auf der Z-Achse. Anfänglich ist die Drehung auf 359.9f eingestellt, nach dem Drücken der Leertaste wird die Drehung auf 179.9f gesetzt, aber wenn ich zurück zur ursprünglichen Drehung (359.9f) gehe, ist die Drehrichtung anders.Drehung umwandeln (Slerp) - Unity
Dies ist mein Code:
using UnityEngine;
using System.Collections;
public class Untitled : MonoBehaviour {
//Lerp Position
private Vector3 start;
private Vector3 end;
//Lerp Time
private float lerpTime = 3f;
private float currentLerpTime = 0;
// Camera Up - Down
public bool up = false;
void Update() {
start = Camera.main.transform.position;
end = new Vector3 (Camera.main.transform.position.x, 105, Camera.main.transform.position.z);
//Quaternions
Quaternion RotationA = Quaternion.Euler (0, 0, 179.9f);
Quaternion RotationB = Quaternion.Euler (0,0, 359.9f);
// Inputs
if (Input.GetKey (KeyCode.Space) && Camera.main.transform.position.y < 8f)
{
up = true;
currentLerpTime = 0;
lerpTime = 3f;
}
if (Input.GetKey (KeyCode.Space) && Camera.main.transform.position.y > 103f)
{
up = false;
currentLerpTime = 0;
lerpTime = 3f;
}
// When the camera is down (Lerp/Slerp)
if (up == false)
{
currentLerpTime += Time.deltaTime;
if (currentLerpTime >= lerpTime)
{
currentLerpTime = lerpTime;
}
float Perc = currentLerpTime/lerpTime;
start = Camera.main.transform.position;
Camera.main.transform.position = Vector3.Lerp (start, new Vector3 (Camera.main.transform.position.x, 105, Camera.main.transform.position.z), Perc);
Camera.main.transform.rotation = Quaternion.Slerp (Camera.main.transform.rotation, RotationA, Perc);
}
// When the camera is up (Lerp/Slerp)
if (up == true)
{
currentLerpTime += Time.deltaTime;
if (currentLerpTime >= lerpTime)
{
currentLerpTime = lerpTime;
}
float Perc = currentLerpTime/lerpTime;
end = Camera.main.transform.position;
Camera.main.transform.position = Vector3.Lerp (end, new Vector3(Camera.main.transform.position.x, 6, Camera.main.transform.position.z), Perc);
Camera.main.transform.rotation = Quaternion.Slerp (Camera.main.transform.rotation, RotationB, Perc);
}
}
}
Ich habe auch versucht eine andere Methode zur Rotation, aber nichts hat sich geändert:
Camera.main.transform.rotation = Quaternion.Slerp (Camera.main.transform.rotation, Quaternion.AngleAxis(179.9f, Vector3.forward), Perc)
Camera.main.transform.rotation = Quaternion.Slerp (Camera.main.transform.rotation, Quaternion.AngleAxis(359.9f, Vector3.forward), Perc)
Wie kann ich das beheben? Danke im Voraus.