2016-03-19 3 views
-1

Итак, на прошлой неделе я начал работать над RPG, и я начал работать с AI противника и должен вращаться до цели, но это не так. То, что я сделал это для врага я создал дочерний объект и поставить скрипт, который вращает его к цели, то во вражеском сценарии я сделал это:JScript - Unity transform.eulerAngles.y не работает

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; 
} 

rotTracker переменная GameObject. Итак, что не так с этим кодом? Трекер вращения изменяет вращение, но не враг. Может быть, потому, что у него есть дочерние объекты, которые смотрят на другую вещь? Я создал спрайт и положил его поверх врага, и он представляет здоровье врагов и всегда поворачивается к камере.

+0

чувак ... "unityscript" *** устарел из Единства - вы не можете его использовать ***. Вы полностью на 100% тратите время на своего чувака. Это абсолютная, полная, полная трата времени. Обратите внимание, что C# на самом деле гораздо проще в использовании *, вам нужно будет изменить свое обучение сейчас – Fattie

+0

Я планирую перейти на C#, но JS не так уж плох. Он отлично работает с несколькими ошибками здесь и там, но кроме этого он действительно хорош. В любом случае, Джо, ты парень, который создал Свидетеля? Потому что вы знаете Джонатана Блау, Joe Blow – DzoniGames

ответ

1

Вы не можете напрямую изменить углы. Вам нужно изменить положения вектора. Например:

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

Надеюсь, это поможет!

+0

Спасибо, работал как шарм, я сделал это вот так: transform.eulerAngles + = Vector3 (0, 1, 0) * number * Time.deltaTime; – DzoniGames

+0

@DzoniGames Добро пожаловать, счастливая кодировка. :) –

0

Вы не должны использовать transform.eulerAngles для приращения, только фиксированные значения. Кроме того, лучше установить его как вектор, а не одну ось.

Если вы положили скрипт на дочерний элемент и на самом деле хотите повернуть родительский элемент, значит, у вас неправильное преобразование, но я не могу четко его прочитать.

Далее я рекомендовал бы делать что-то вроде этого:

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 быть фактором для того, как быстро вы хотите повернуть. (Я думаю, что код должен быть правильным, я использую C# хотя.)

+0

Это хороший способ сделать это, но это не то, что я на самом деле хочу, потому что я хочу только одну ось. – DzoniGames

+0

Вы тоже можете сделать это, внесли изменения, должно быть правильно, я думаю. –

+0

Да, теперь это выглядит хорошо, но я не знаю, почему, но я не люблю Кватернионы. В любом случае я бы использовал это :) – DzoniGames

Смежные вопросы