2016-10-08 2 views
0

Ich habe zwei Objekte, Räuber und Beute. Ich versuche Code zu schreiben, so dass, wenn der Räuber die Beute sieht, er sich in seine Richtung dreht und sich vorwärts bewegt (in dieselbe Richtung).RotateTowards nicht rotierende transform.forward

Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity); 
transform.Translate (transform.forward * predatorSpeed); 

Mein Verständnis ist, dass der obige Code transform.forward drehen sollte, aber es ist der gleiche Vektor sowohl vor als auch nach dieser Zeile ist. Warum passiert dies? Ich habe viele Dinge ausprobiert, aber ich kann das nicht zum Laufen bringen.

Antwort

0

Weil Vector3 in Unity ein struct (Werttyp) ist, also immer als Wert übergeben.

Vector3 v = Vector3.zero; 
ChangeValue(v); // Change value of v.x, v.y, v.z 
Debug.Log(v); // still (0, 0, 0); 

Das gesagt, Vector3.RotateTowards() muss einen Vector3 zurückgeben. Grundsätzlich benötigen Sie:

transform.forward = Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity); 

Aber ich bin nicht sicher, ob es funktionieren wird, weil transform.forward unveränderlich ist. https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html

Wenn Sie ein Ziel begegnen wollen drehen, betrachten 1 davon:

Transform.LookAt();
Quaternion.RotateTowards();
Quaternion ein struct ist auch so bitte die Dokumentation sorgfältig lesen.

+0

Ich hatte diese Verwendung von RotateTowards versucht, aber es funktioniert nicht. Transform.LookAt() endete damit, was ich brauchte. Vielen Dank!! – Taylor