PlayerController (Unity/C#). Условия запуска анимаций по 8-ми направлениям. Ошибка "не все пути возвращают значение

Проблематика: пишу код для запуска Спрайт-анимаций в зависимости от направления движения по X и Y. Перечислил все состояния (x>0 y>0, x>0 y<0, x<0 y<0, x<0 y>0, x=0 y<0, x=0 y>0, x>0 y=0 x<0 y=0). Ошибка:

"TopDownController.GetSpriteDirection()": не все пути возвращают значение.

Заранее извиняюсь за стилистику. Полный нуб. Код писал по уроку.

Код:

List<Sprite> GetSpriteDirection()
{
    List<Sprite> selectedSprites = null;
    if (direction.y > 0) // north east
    {
        if (direction.x > 0)
        {
            selectedSprites = nESprites;
        }
    }
    else if (direction.y > 0) // north west
    {
        if (direction.x < 0)
        {
            selectedSprites = nWSprites;
        }
        else if (direction.y < 0) // south east
        {
            if (direction.x > 0)
            {
                selectedSprites = sESprites;
            }
            else if (direction.y < 0) // south west
            {
                if (direction.x < 0)
                {
                    selectedSprites = sWSprites;
                }
            }
            else if (direction.y < 0) // south
            {
                if (direction.x == 0)
                {
                    selectedSprites = sSprites;
                }
            }
            else if (direction.y > 0) // north
            {
                if (direction.x == 0)
                {
                    selectedSprites = nSprites;
                }
            }
            else if (direction.y == 0) // east
            {
                if (direction.x > 0)
                {
                    selectedSprites = eSprites;
                }
            }
            else if (direction.y == 0) // west
            {
                if (direction.x < 0)
                {
                    selectedSprites = wSprites;
                }
            }
            return selectedSprites;
        }
    }
}

Ответы (2 шт):

Автор решения: Cost

Каждая ветвь в методе GetSpriteDirection должна возвращать List<Sprite>, например, selectedSprites. У вас есть первое условие direction.y > 0 и, соответственно, две ветви: когда это условие верно, и когда нет. Обе эти ветви должны возвращать какое-то значение списка. А у вас значение возвращается только в одной из последующих подветвей блока else.

Проще всего в таком случае написать оператор return один раз в самом конце метода, а в каждой из ветвей только изменять соответствующим образом возвращаемый список. Или же, если ветвей немного и они очевидны, то использовать несколько операторов return (но в этом конкретном случае это не так, ибо ветвей много)

→ Ссылка
Автор решения: Yaroslav

У тебя столько if, что ты сам запутался. Первое же условие ничего не возвращает, если х не больше нуля. Вся эта пизанская башня вообще не нужна, дело решается в две строчки и конкатенацией.

public string GetCompasVector (Vector2 vector)
{
    string ver = vector.y > 0 ? "n" : 
       vector.y < 0 ? "s" : "";
    string hor = vector.x > 0 ? "e" : 
       vector.x < 0 ? "w" : "";
    return ver + hor;
}
string spriteName = GetCompasVector(direction) + "Sprite";
→ Ссылка