2016-03-19 5 views
-1

So letzte Woche begann ich an einem RPG zu arbeiten, und ich habe angefangen, an der feindlichen KI zu arbeiten, und es sollte sich auf sein Ziel drehen, aber es tut es nicht. Was ich tat, ist für den Feind, den ich ein Kind-Objekt erstellt und ein Skript gesetzt, dass es an das Ziel dreht, dann im feindlichen Skript ich dies tat:JScript - Unity transform.muelerAngles.y funktioniert nicht

if(transform.eulerAngles.y > rotTracker.transform.eulerAngles.y) { 

    transform.eulerAngles.y -= 2 * Time.deltaTime; 
} 
if(transform.eulerAngles.y < rotTracker.transform.eulerAngles.y) { 

    transform.eulerAngles.y += 2 * Time.deltaTime; 
} 

der rotTracker ein Gameobject variabel ist. Also, was ist falsch an diesem Code? Der Rotations-Tracker ändert die Rotationen, aber nicht den Feind. Vielleicht, weil es Kinderobjekte gibt, die etwas anderes betrachten? Ich habe ein Sprite erstellt und es auf den Feind gelegt und es stellt die Gesundheit des Feindes dar und wendet sich immer der Kamera zu.

+0

dude ... "unitscript" *** ist veraltet von Unity - Sie können es nicht benutzen ***. Du verschwendest deine Zeit absolut zu 100%. Es ist eine absolute, totale Verschwendung Ihrer Zeit. Beachten Sie, dass C# tatsächlich * viel einfacher zu benutzen ist *, Sie müssen Ihr Lernen jetzt umstellen – Fattie

+0

Ich plane, auf C# zu wechseln, aber JS ist eigentlich gar nicht so schlecht. Es funktioniert gut mit ein paar Bugs hier und da, aber ansonsten ist es wirklich gut. Wie auch immer, Joe, bist du der Typ, der The Witness geschaffen hat? Weil Sie wissen, Jonathan Blow, Joe Blow – DzoniGames

Antwort

1

Sie können die Winkel nicht direkt ändern. Sie müssen die Vektorpositionen ändern. Zum Beispiel:

var yRotation -= 2 * Time.deltaTime;  
transform.eulerAngles = new Vector3(0, yRotation, 0); 

Hoffe, das hilft!

+0

Danke, arbeitete wie ein Zauber nur ich tat es so: transform.eulerAngles + = Vector3 (0, 1, 0) * Anzahl * Time.deltaTime; – DzoniGames

+0

@DzoniGames Gern geschehen, Happy Coding. :) –

0

Sie sollten nicht transform.eulerAngles für Inkrement verwenden, nur feste Werte. Stellen Sie es auch besser als Vektor ein, nicht als einzelne Achse.

Wenn Sie das Skript auf das Kind gelegt haben und den Elternteil tatsächlich drehen wollen, dann haben Sie die falsche Transformation, aber ich kann das nicht klar lesen.

Weiterhin würde ich empfehlen, so etwas wie dies zu tun:

var dir = transform.postion - target.position; 
dir.y = 0; // set the axis you want to rotate around to 0 
var targetRotation = Quaternion.LookRotation(dir); 
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * speed); 

speed ein Faktor, wie schnell Sie drehen möchten. (Ich denke, dass der Code korrekt sein sollte, verwende ich C#.)

+0

Dies ist ein guter Weg, um es zu tun, aber es ist nicht das, was ich eigentlich will, weil ich nur eine Achse wollen – DzoniGames

+0

Sie können das auch tun, hat eine Bearbeitung, sollte korrekt sein, denke ich. –

+0

Ja, das sieht jetzt gut aus, aber ich weiß nicht warum, aber ich mag Quaternions nicht. Jedenfalls würde ich das verwenden :) – DzoniGames