Я начал программировать в Unity просто для развлечения пару дней go. Пока что моя игра (в значительной степени нисходящий шутер) состоит из игрока, летящего на астероидном поле, в котором скрываются вражеские корабли. Игрок может сбивать астероиды и врагов, а вражеские корабли имеют ракетные башни, которые «отслеживают» игрока.
Все отлично работало, пока я не решил, что вражеские корабли не должны поворачивать свои башни на 360 градусов. Думайте об этом как о реальном линкоре, неспособном повернуть его переднюю башню (№ 1) на 180 градусов позади, потому что турель № 2 находится в пути.
В настоящее время код для вращения башни является следующим (это не о «постепенном вращении», настройке «скорости вращения» или о чем-то другом, поэтому, пожалуйста, не смотрите на это!):
playerTarget = GameObject.FindGameObjectWithTag("Player");
chaseDirection = Quaternion.LookRotation(playerTarget.transform.position - transform.position);
newYaw = Mathf.Clamp(chaseDirection.eulerAngles.y, minYaw, maxYaw);
transform.rotation = Quaternion.Euler(0, newYaw, 0);
Это работает нормально, пока игрок не улетит позади вражеский корабль. Как только игрок попадает в «возможный угол поворота» башни, он просто переходит за «мертвую зону» в новое направление, если я не поворачиваю его постепенно с фиксированным углом, или все еще застрял, пытаясь повернуть «мимо предела» до цели ( игрок) летает вокруг вражеского корабля, поэтому угол к цели достаточно мал, чтобы направление вращения можно было вычислить через «активированную» зону вращения, а не через «мертвую зону».
Важно то, что я не ищу ответ "как сделать постепенное вращение". Я рассчитываю на направление вращения!
![Turret points at player. Player moves counter-clockwize](https://i.stack.imgur.com/y1SHW.png)
![Turret tries to target player. Player is in](https://i.stack.imgur.com/h20g7.png)
Я думал о кодировании противника, чтобы он начал вращать турель в противоположном направлении, как только игрок пройдет «прямо за» башней «вперед». Но концепция того, как это сделать, ускользает от меня.
Потому что, как только турель немного поворачивается от предела, она может снова повернуться к игроку и снова застрянет на пределе.