Проблема с поворотом 2D!

Программирование на Юнити.

Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 21:08

Делаю свою первую top-down игру, дошел до момента когда надо сделать врага который следует за мной, в обычном 2D с этим проблем не было т.к там работает Vector3.lerp но в случае top-down мне пришлось думать самому, в итоге пришел к мнению что надо сделать постоянно вращающийся объект(во враге) который будет испускать луч , если луч засек playera, то угол объекта сохраняется , и мой враг вращается за этим углом, НО мне нужно чтобы враг плавно вращался, а не мгновенно, это я тоже вроде бы сделал , но вопрос в том в какую сторону он должен вращаться , если просто сделать чтобы он в одну сторону вращался(например по часовой) , это выглядит тупо например если угол был равен 30, а ему надо повернуть на 29, то он начнет поворачиваться не на -1 градус , а на 359, попробовал сделать так : if (угол объекта > угла врага ) угол врага ++; if (угол объекта < угла врага) угол врага--; вроде бы это работает пока не проедешь угол 0 градусов , т.к угол врага был равен примерно там - 178 , луч меня засек уже на угле например 3 градуса , то он увидит что угол врага < нового угла, и начнет прибавлять угол врага до того момента пока он не станет равен 3 , то есть он повернет не на 5 градусов как нужно , а начнет крутить все 176 градусов по часовой, вот в чем вся проблема.
Сомневаюсь что кто то понял что я имел ввиду.
Либо предложите альтернативное решение погони врага.
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение samana 15 мар 2017, 21:28

Но ведь Lerp есть и у Vector2. Точнее я не совсем понимаю разницу между реализацией кручения персонажа в топ-даун жанре, всё равно ведь крутиться одинаково.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 21:33

Конечно lerp работает , но , например у меня машина , если в top down я ввиду vector2.lerp то машина будет преследовать меня боком! Поэтому нужно чтобы например "машина" поворачивала на меня и ехала .
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение samana 15 мар 2017, 21:47

Хм.. а вы поворачивайте машину вдоль пути, например через её transform.right, если изначально спрайт машины смотрит фарами вправо или другую удобную ось (up, down,left).

Я имею ввиду
Синтаксис:
Используется csharp
car.transform.right = направлениеКцели
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 21:53

Я так и делаю машина едет через transform.up , постоянно , просто проблема у меня в том в какую сторону он будет поворачивать , у меня он поворачивает за мной , но не рационально ! То есть если угол например = -179 , а угол луча = 1 , то он начнет разворачиваться против часовой , и прокрутит все 182 градуса!
Последний раз редактировалось NAGIBATOR228pacan 15 мар 2017, 21:59, всего редактировалось 1 раз.
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение samana 15 мар 2017, 21:58

NAGIBATOR228pacan писал(а):Нет так не сработает, режим сверху мне кажется больше похож на 2d чем на 3d, и такое не прокатит потому что , если я вставлю этот скрипт когда я поеду выше чем car то он поедет дальше только по оси x а на y ему будет наплевать,


Нет же) Это автомобиль будет ехать только по x если вы установите Vector2.right, а transform.right отвечает за правую сторону спрайта. То-есть например спрайт всегда будет "нацелен" своей правой стороной к некой точке:

Синтаксис:
Используется csharp
transform.right = некаяТочка.position - transform.position;
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 22:01

Я только недавно начал с unity возится может ,может сразу не понял , сейчас попробую.
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 22:11

Вставил эту строчку , вроде бы всё заработало, спасибо!
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 22:35

Проблема, так он поворачивает мгновенно , это заметно если резко подъехать сзади и враг меня обнаружил , то он Мгновенно , поворачивается на 180 и следует за мной!
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение samana 15 мар 2017, 22:40

Конечно мгновенно, если вы не написали код для плавности.
Поэтому попробуйте с Lerp.
Например в Update такой код (пишу здесь, могут быть ошибки)

Синтаксис:
Используется csharp
float speedRotation = 10f; // скорость разворота
Vector2 directionToTarget = target.position - transform.position; // направление к цели
transform.right = Vector2.Lerp(transform.right, directionToTarget, speedRotation * Time.deltaTime); // плавный поворот правой стороной спрайта к цели
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Проблема с поворотом 2D!

Сообщение NAGIBATOR228pacan 15 мар 2017, 22:53

Всё теперь всё нормально и адекватно работает, большое спасибо!
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Проблема с поворотом 2D!

Сообщение samana 15 мар 2017, 22:54

Пожалуйста!
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8