Страница 1 из 1

Как заставить один объект "смотреть" за другим?

СообщениеДобавлено: 16 сен 2018, 19:13
XSiL
Есть 2д игра с видом сверху, действия происходит в X и Y. Я создал врага, который минуя все преграды движется за игроком, однако я никак не могу найти способ заставить его смотреть в сторону игрока. Пробовал LookAt(), не помогло, враг поворачивается так, что его просто не видно. Можно ли изменить LookAt(), или есть какой нибудь другой способ?
P.s Вопрос глупый, ибо я новичок.

Re: Как заставить один объект "смотреть" за другим?

СообщениеДобавлено: 16 сен 2018, 19:33
1max1
Синтаксис:
Используется csharp
public enum LookType
{
    Up,
    Down,
    Left,
    Right      
}

static class Extensions
{
    #region LookAt2D
    public static void LookAt2D(this Transform me, Vector3 target, Vector3 eye)
    {
        Vector3 look = target - me.position;

        float sAngle = Vector2.SignedAngle(eye, look);

        if (sAngle != 0.0f)
        {
            var eulerAngles = me.eulerAngles;

            eulerAngles.z += sAngle;

            me.eulerAngles = eulerAngles;
        }
    }

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

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

    public static void LookAt2D(this Transform me, Vector3 target, LookType lookType = LookType.Up)
    {
        Vector3 look = target - me.position;

        look.z = 0.0f;

        switch (lookType)
        {
            case LookType.Up:    me.up =     look; break;
            case LookType.Down:  me.up =    -look; break;
            case LookType.Left:  me.right = -look; break;
            case LookType.Right: me.right =  look; break;
        }
    }

    public static void LookAt2D(this Transform me, Transform target, LookType lookType = LookType.Up)
    {
        me.LookAt2D(target.position, lookType);
    }

    public static void LookAt2D(this Transform me, GameObject target, LookType lookType = LookType.Up)
    {
        me.LookAt2D(target.transform.position, lookType);
    }
    #endregion
}