Amir228
@Amir228

Что не так с поворотом?

Вобщем, у меня персонаж в top down 2d шутере смотрит на позицию мыши, если у него есть оружие тогда персонажу добавляют пару градусов. Добавление этих пару градусов сделан через метод Vector2.SignedAngle где 1 параметр это направление от позиции дуло оружие до позиции мыши, а 2 параметр то же направление до позиции мыши только уже от позиции игрока.

Так вот, если мышь находиться возле персонажа, он начинает очень быстро крутиться. Я пробовал делать ограничение что то вроде Если дистанция от персонажа до мыши будет меньше 3-ех (например), тогда персонажу не добавляються эти пару градусов. Но выгледит это довольно криво есои присмотреться. Как можно сделать так чтобы он перестал крутиться?

В оружие есть метод AdditionalAngleGet, он как раз добавляет эти пару градусов.
public float AdditionalAngleGet(Vector2 ownerPos, Vector2 targetPos)
{
Vector2 direction1 = targetPos -  ownerPos;
Vector2 direction2 = targetPos  -  muzzlePos;
return Vector2.SignedAngle(direction2, direction1);
}


muzzlePos—это позиция дуло оружие
targetPos—позиция цели, в данном случаи это позиция мыши.
ownerPos —позиция хозяина оружие
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ответы на вопрос 1
WNeZRoS
@WNeZRoS
Всё зависит от того что вы хотите получить и что такое "криво выглядит".

Можно, например, делать интерполяцию, тогда при подходе к 3 метрам расстояния дополнительный угол плавно уберётся:
angle = Mathf.LerpAngle(angle, angle - additionalAngle, direction.magnitude - 3);


А можно не давать целится ближе 3 метров:
if (direction.magnitude < 3)
    targetPos = ownerPos + direction.normalized * 3;


PS

На вопрос можно было бы получить ответ быстрее если прикладывать больше контекста:
- больше кода - всё что относится к повороту
- как настроены объекты
- видео или гифку с проблемой
- видео как хотелось бы чтобы оно работало
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы