private void FixedUpdate()
    {
        // Если объект не перемещается - выйти
        if (!mover.Moving)
        {
            return;
        }
        int facing = mover.GetFacing();

        // Если объект перемещается, применить выравнивание по сетке
        // Сначала получить координаты ближайшего узла сетки
        Vector2 rPos     = mover.RoomPos;
        Vector2 rPosGrid = mover.GetRoomPosOnGrid(); // Этот код полагается на интерфейс IFacingMover для определения шага сетки

        // Подвинуь объект в сторону линии сетки
        float delta = 0;

        if (facing == 0 || facing == 2) // Движение по горизонтали, выравнивание по оси у
        {
            delta = rPosGrid.y - rPos.y;
        }
        else // Движение по вертикали, выравнивание по оси х
        {
            delta = rPosGrid.x - rPos.x;
        }
        if (delta == 0)
        {
            return; // Объект уже выровнен по сетке
        }
        float move = mover.GetSpeed() * Time.fixedDeltaTime;

        move = Mathf.Min(move, Mathf.Abs(delta));
        if (delta < 0)
        {
            move = -move;
        }
        if (facing == 0 || facing == 2)
        {
            rPos.y += move;
        }
        else
        {
            rPos.x += move;
        }
        mover.RoomPos = rPos;
    }
    void FixedUpdate()
    {
        if (!mover.moving)
        {
            return;
        }
        int facing = mover.GetFacing();

        Vector2 rPos     = mover.roomPos;
        Vector2 rPosGrid = mover.GetRoomPosOnGrid();

        float delta = 0;

        if (facing == 0 || facing == 2)
        {
            delta = rPosGrid.y - rPos.y;
        }
        else
        {
            delta = rPosGrid.x - rPos.x;
        }
        if (delta == 0)
        {
            return;
        }

        float move = mover.GetSpeed() * Time.fixedDeltaTime;

        move = Mathf.Min(move, Mathf.Abs(delta));
        if (delta < 0)
        {
            move = -move;
        }

        if (facing == 0 || facing == 2)
        {
            rPos.y += move;
        }
        else
        {
            rPos.x += move;
        }

        mover.roomPos = rPos;
    }
Beispiel #3
0
    private void FixedUpdate()
    {
        if (!mover.moving)
        {
            return;
        }
        int facing = mover.GetFacing();

        // если объект перемещается, применить выравнивание по сетке, получив координаты ближайшего узла
        Vector2 rPos     = mover.roomPos;
        Vector2 rPosGrid = mover.GetRoomPosOnGrid();
        // этот код полагается на IFacingMover для определения шага сетки

        // двигаем объект в сторону линии сетки
        float delta = 0;

        if (facing == 0 || facing == 2)
        {
            delta = rPosGrid.y - rPos.y;                             // горизонтальное движение, выравнивание по у
        }
        else
        {
            delta = rPosGrid.x - rPos.x;  // вертикальное движение, выравнивание по х
        }
        if (delta == 0)
        {
            return;             // объект уже выровнен
        }
        float move = mover.GetSpeed() * Time.fixedDeltaTime;

        move = Mathf.Min(move, Mathf.Abs(delta));
        if (delta < 0)
        {
            move = -move;
        }
        if (facing == 0 || facing == 2)
        {
            rPos.y += move;                             // горизонтальное движение, выравнивание по у
        }
        else
        {
            rPos.x += move;  // вертикальное движение, выравнивание по х
        }
        mover.roomPos = rPos;
    }