Страница 1 из 1

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

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

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

СообщениеДобавлено: 15 мар 2017, 21:28
samana
Но ведь Lerp есть и у Vector2. Точнее я не совсем понимаю разницу между реализацией кручения персонажа в топ-даун жанре, всё равно ведь крутиться одинаково.

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

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

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

СообщениеДобавлено: 15 мар 2017, 21:47
samana
Хм.. а вы поворачивайте машину вдоль пути, например через её transform.right, если изначально спрайт машины смотрит фарами вправо или другую удобную ось (up, down,left).

Я имею ввиду
Синтаксис:
Используется csharp
car.transform.right = направлениеКцели

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

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

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

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


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

Синтаксис:
Используется csharp
transform.right = некаяТочка.position - transform.position;

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

СообщениеДобавлено: 15 мар 2017, 22:01
NAGIBATOR228pacan
Я только недавно начал с unity возится может ,может сразу не понял , сейчас попробую.

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

СообщениеДобавлено: 15 мар 2017, 22:11
NAGIBATOR228pacan
Вставил эту строчку , вроде бы всё заработало, спасибо!

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

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

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

СообщениеДобавлено: 15 мар 2017, 22:40
samana
Конечно мгновенно, если вы не написали код для плавности.
Поэтому попробуйте с Lerp.
Например в Update такой код (пишу здесь, могут быть ошибки)

Синтаксис:
Используется csharp
float speedRotation = 10f; // скорость разворота
Vector2 directionToTarget = target.position - transform.position; // направление к цели
transform.right = Vector2.Lerp(transform.right, directionToTarget, speedRotation * Time.deltaTime); // плавный поворот правой стороной спрайта к цели

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

СообщениеДобавлено: 15 мар 2017, 22:53
NAGIBATOR228pacan
Всё теперь всё нормально и адекватно работает, большое спасибо!

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

СообщениеДобавлено: 15 мар 2017, 22:54
samana
Пожалуйста!