Есть скрипт, который поворачивает объект за курсором:
void Update()
{
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float rotateZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
vector.transform.rotation = Quaternion.Euler(0f, 0f, Mathf.Clamp(rotateZ, 0f, 180f));
}
Вот эта "чёрная палочка":
Я ограничил поворот объекта с помощью Mathf.Clamp и со своей основной задачей он справляется, но когда указатель опускается ниже объекта, то значение rotation всегда меняется на 0, а не останавливается на 180:
Пробовал так:
void Update()
{
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
if (difference.y > 0)
{
float rotateZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
vector.transform.rotation = Quaternion.Euler(0f, 0f, Mathf.Clamp(rotateZ, 0f, 180f));
}
}
но если опустить курсор ниже объекта слишком быстро, то скрипт может не всё просчитать и rotation остановится на тех значениях, которые успели просчитаться.
Думаю его можно допилить, но по моему мнению это лютый костыль, поэтому использовать её я не хочу