2017-05-28 4 views
-1

Ich arbeite an einem Third-Person-Shooter. Und ich habe diesen Code gefunden. Aber ich kann damit keinen Sinn machen. Zuerst multipliziert man Quaternion mit "Vector3.forward" und der Compiler zeigt nichts. Und können Sie mir auch die Hauptlogik dieses Codes verdeutlichen. Ich weiß, dass das Auswendiglernen des Codes keine gute Angewohnheit ist. Kannst du mir den Code erklären? Und was macht der Quaternion.euler, wenn er Euler in Quaternion umwandelt?Wie Quaternion mit einem Vektor multipliziert wird?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class CameraFollow : MonoBehaviour { 
    [SerializeField] 
    Transform target; 
    [SerializeField] 
    float distance; 
    [SerializeField] 
    float targetheight; 

    private float x = 0; 
    private float y = 0; 

    void LateUpdate() 
    { 

     y = target.eulerAngles.y; 

     Quaternion rotation = Quaternion.Euler(x, y, 0); 
     Debug.Log(rotation); 
     transform.rotation = rotation; 

     var postion = target.position - (rotation *Vector3.forward* distance + new Vector3(0, -targetheight, 0)); 
     transform.position = postion; 
    } 
} 

Antwort

2

Lassen Sie uns es brechen:

y = target.eulerAngles.y; 

Diese Transform.eulerAngles() ist und gibt Ihnen die aktuelle Rotation des Ziels als Quaternion.

Dann wird diese Drehung erneut auf das Ziel angewendet, aber die Rotation um die Z-Achse wird entfernt.

Quaternion rotation = Quaternion.Euler(x, y, 0); 
Debug.Log(rotation); 
transform.rotation = rotation; 

Dies ist Quaternion.Euler(x,y,z) und gibt Ihnen eine Rotation von drei Grad-Werten.

Zuletzt wird die folgende Berechnung:

var postion = target.position - (rotation *Vector3.forward* distance + new Vector3(0, -targetheight, 0)); 
transform.position = postion; 

Multiplizieren einer Vector3 durch ein Quaternion Mittel, um die Rotation auf den Vektor anzuwenden. In diesem Fall würden Sie den Vorwärtsvektor basierend auf der Drehung des Ziels drehen (ohne die Z-Achsenrotation, da wir diese früher auf 0 setzen). Dann wird der sich ergebende Vorwärtsvektor mit einer bestimmten Entfernung multipliziert, um uns einen Punkt irgendwo vor der aktuellen zugewandten Richtung des Ziels zu geben, und gemäß der Variablen targetheight abgesenkt.

Schließlich wird die Berechnung von unserer eigenen aktuellen Position subtrahiert, wobei im Grunde genommen eine Punktspiegelung durchgeführt wird, wobei das Ziel der Punkt ist. Das Ergebnis ist, dass wir tatsächlich eine Position haben, die eine positive Höhe hat (ursprünglich verwendeten wir eine negative Zielhöhe) und sich hinter der Zielrichtung des Ziels befinden.

+0

danke jetzt verstand ich, dass Multiplikation nur für die Anwendung der Rotation in Vektor war –

Verwandte Themen