Dieser Code wird an eine Kamera angehängt:bewegen sich in Richtung transform.forward, ignorieren Rotation
transform.position += Input.GetAxis("Vertical") * transform.forward * mod;
transform.position += Input.GetAxis("Horizontal") * transform.right * mod;
Ich .forward verwendet habe und .right weil der Spieler in der Lage, die Kamera auf dem Y Axiz zu drehen, so dass Ganz gleich, auf welche Weise die Kamera auf die Vorwärts-Taste gerichtet ist, sie bewegt die Kamera immer relativ nach vorne, die linke Taste bewegt sie relativ nach links und so weiter. Nur um zu verdeutlichen - ich möchte, dass es sich im lokalen Raum bewegt, nicht im Welt-Raum, also ist die Richtung, in die es gerichtet ist, nicht unbedingt Vector3 (0,0,1).
Die Kamera ist frei roaming und hat keine Eltern oder Ziel zu folgen.
Das Problem ist die Kamera hat eine X-Drehung von 45 nach unten zu sehen. Mit transform.forward wird also die Höhe geändert. Es gibt auch einen Scroll-Code, um die Höhe der Kamera zu ändern, so dass ich die Höhe nicht auf einen festen Wert einstellen möchte. Wie kann ich die Bewegung nur auf X und Z beschränken, am besten ohne es zu leeren?
Update: Dieser Code funktioniert, aber es ist nicht schön, ich bin sicher, es gibt eine elegantere Lösung mit Vector3.Project, wie xyLe_ vorschlägt. Wenn ich es herausfinde, füge ich seiner Antwort noch etwas hinzu.
mod = Time.deltaTime * 30;
float yPos = transform.position.y;
pos = transform.position;
pos += Input.GetAxis("Vertical") * transform.forward * mod;
pos.y = yPos;
pos += Input.GetAxis("Horizontal") * transform.right * mod;
pos += Input.GetAxis("Mouse ScrollWheel") * transform.up * mod * -30;
[Math.Clamp] (https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html) könnte helfen. – Catwood
Sie wollen also "Welt" Vorwärtsrichtung verwenden? Wenn das der Fall ist, dann sind die Richtungen der Welt konstant 'Vector3.Up = new Vector3 (0, 1, 0);' –
Drehen Sie 'transform.forward' mit Ihrer Rotation um' transform.right', um es mit der xz-Ebene – TheDjentleman