неправильный поворот объекта 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. во втором куске кода верно.

→ Ссылка