LookAt в 2D

Общие вопросы о Unity3D

LookAt в 2D

Сообщение Rulz009 20 окт 2017, 12:02

Привет всем.
Такой вопрос - в 3D всё работает нормально (transform.LookAt(target);), но как это реализовать в 2D? То есть, чтобы объект (спрайт) поворачивался вслед за изменением позиции таргета (тоже спрайта). Возможно, вообще это делается не через lookat?
Rulz009
UNец
 
Сообщения: 20
Зарегистрирован: 17 май 2017, 16:56

Re: LookAt в 2D

Сообщение 1max1 20 окт 2017, 14:48

Синтаксис:
Используется csharp
static class Extensions
{
        #region LookAt2D
        public static void LookAt2D(this Transform me, Vector3 target, Vector3? eye = null)
        {
            float signedAngle = Vector2.SignedAngle(eye ?? me.up, target - me.position);

            if (Mathf.Abs(signedAngle) >= 1e-3f)
            {
                var angles = me.eulerAngles;
                angles.z += signedAngle;
                me.eulerAngles = angles;
            }
        }
        public static void LookAt2D(this Transform me, Transform target, Vector3? eye = null)
        {
            me.LookAt2D(target.position, eye);
        }
        public static void LookAt2D(this Transform me, GameObject target, Vector3? eye = null)
        {
            me.LookAt2D(target.transform.position, eye);
        }
        #endregion
}
 


Расширение для трансформа, где eye это глобальное направление которое будет повернуто сторону нужных координат, к примеру использовать так:
Синтаксис:
Используется csharp
transform.LookAt2D(Vector2.zero);

В результате получим что вектор up спрайта будет направлен в (0,0) координату.
Последний раз редактировалось 1max1 01 янв 2020, 21:19, всего редактировалось 4 раз(а).
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: LookAt в 2D

Сообщение Valentinus 20 окт 2017, 15:23

другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 889
Зарегистрирован: 24 мар 2017, 18:33

Re: LookAt в 2D

Сообщение Rulz009 20 окт 2017, 18:23

Valentinus писал(а):https://yandex.ru/yandsearch?&clid=2186620&text=unity%20LookAt%20%D0%B2%202D&lr=49

Google лучше.
Rulz009
UNец
 
Сообщения: 20
Зарегистрирован: 17 май 2017, 16:56

Re: LookAt в 2D

Сообщение Rulz009 20 окт 2017, 18:24

1max1 писал(а):
Синтаксис:
Используется csharp
static class Extension
{
    #region LookAt2D
    public static void LookAt2D(this Transform me, Vector2 eye, Vector2 target)
    {
        Vector2 look = target - (Vector2)me.position;

        float angle = Vector2.Angle(eye, look);

        Vector2 right = Vector3.Cross(Vector3.forward, look);

        int dir = 1;

        if (Vector2.Angle(right, eye) < 90)
        {
            dir = -1;
        }

        me.rotation *= Quaternion.AngleAxis(angle * dir, Vector3.forward);
    }

    public static void LookAt2D(this Transform me, Vector2 eye, Transform target)
    {
        me.LookAt2D(eye, target.position);
    }

    public static void LookAt2D(this Transform me, Vector2 eye, GameObject target)
    {
        me.LookAt2D(eye, target.transform.position);
    }
    #endregion
}
 


Расширение для трансформа, где eye это глобальное направление которое будет повернуто сторону нужных координат, к примеру использовать так:
Синтаксис:
Используется csharp
transform.LookAt2D(transform.up, Vector2.zero);

В результате получим что вектор up спрайта будет направлен в (0,0) координату.


Спасибо, очень помогли
Rulz009
UNец
 
Сообщения: 20
Зарегистрирован: 17 май 2017, 16:56


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8