неправильный поворот объекта Unity2D
У меня есть код который создаёт фаерболы и поворачивает их в сторону в врага, однако он нормально работает только по диагонали в правую сторону, в других случаях он ведет себя странно
IEnumerator ThrowFireballs()
{
while (true)
{
GameObject currentTarget = GetTarget();
this.currentTarget = currentTarget;
if (currentTarget != null)
{
Vector3 difference = (currentTarget.transform.position - transform.position);
float RotZ = Mathf.Atan2(difference.x, difference.y) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, 0, RotZ);
Instantiate(fireBall, transform.position, transform.rotation);
}
yield return new WaitForSeconds(CoolDown);
}
}
GameObject GetTarget()
{
Collider2D[] colls = new Collider2D[0];
colls = Physics2D.OverlapCircleAll(transform.position, radius, 1 << targetLayer);
if (colls.Length > 0)
{
return colls[UnityEngine.Random.Range(0, colls.Length)].gameObject;
}
return null;
}
Скрипт полёта фаерболла описан в другом файле и работает нормально. Похожий код на тестовом проекте также работает нормально
void Update()
{
Vector3 difference = target.transform.position - transform.position;
float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotationZ);
}
P.S пожалуйста не пишите про чистоту кода, название переменных и тд. пишите только про конкретную проблему описанную выше
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
У Atan2 обратный порядок аргументов:
Mathf.Atan2(difference.y, difference.x)
P.S. во втором куске кода верно.