2016-12-09 3 views
0

У меня есть игрок в нижней части экрана и враг в верхней части экрана. Я хочу, чтобы они оба постоянно вращались друг к другу. Вот мой код, как:Игрок и враг 2D-автоматическое вращение

void Update() 
    { 
     Vector3 diff = target.position - transform.position; 
     diff.Normalize(); 

     float zRotation = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; 
     Vector3 lookDirection = new Vector3(0, 0, zRotation - 90); 
     transform.rotation = Quaternion.Euler(lookDirection); 
    } 

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

Если я переключил diff вектор, как это:

Vector3 diff = transform.position - target.position; 

Тогда это игрок, который смотрит в сторону от противника. Оба спрайта имеют 0 значений для вращения и масштабирования в редакторе.

Что здесь не так?

ответ

0

Ваше решение отлично работает для меня: http://imgur.com/a/spi3O

Может быть, что «вверх» для Врагом является «вниз» для игрока. Значит, один из ваших спрайтов перевернут вверх дном?

Вы можете попробовать следующее, но она дает тот же результат:

var dir = target.position - transform.position; 
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); 

Если вы собираетесь использовать тот же метод вычисления вращения, вы должны убедиться, что ваши спрайты имеют один и тот же мир - относительное собственное вращение, или исправить это.

+0

Это не работает в 2D. Я только хочу повернуть на Z-оси. – Abdou023

+0

Так измените значения цели на 0 на x и y – Maakep

+0

Вы пытались использовать функцию в 2D? Можете ли вы заставить его работать, используя мой код выше? – Abdou023

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