Redukowanie "if" przy użyciu GetKeyDown

0

Przychodzę z pytaniem jakbym mógł zredukować ilość if w danym skrypcie:

   if (Input.GetKeyDown("1")) SelectItem(0);
   if (Input.GetKeyDown("2")) SelectItem(1);
   if (Input.GetKeyDown("3")) SelectItem(2);
   if (Input.GetKeyDown("4")) SelectItem(3);
   if (Input.GetKeyDown("5")) SelectItem(4);
   if (Input.GetKeyDown("6")) SelectItem(5);
   if (Input.GetKeyDown("7")) SelectItem(6);

SelectItem zawsze wynosi o jedną jednostkę mniej niz naciśnięty klawisz

C#

0
  1. Przekształcić string w integera mam nie uczyła ?

  2. Map / Dictionary

do 1. lub 2. dodac foerach / for

Ten kod ma GORSZY problem. Pobieranie czegoś z kolejki. BYĆ MOŻE w tym jednym jedynym przypadku to nie zachodzi, ale to jest bardzo zły wzorzec. w 99% przypadkach zaleca się jedno pobranie pod zmienna (disclaimer: nie znam unity, ani nie zamierza)

4
for (int i = 1; i <= 7; ++i)
{
  if (Input.GetKeyDown(i.ToString()))
  {
    SelectItem(i - 1);
  }
}
2

Możesz tak:

for (int i = 1; i <= 7; i++)
{
  if (Input.GetKeyDown(i.ToString())
  {
    SelectItem(i-1);
    break;
  }
}
2

@mstl: break spowoduje niezgodność z pierwotnym kodem. :P

0

Wpitol to w jakis kontener przechowujący stringi a inty będą indeksami. Nie trzeba będzie wykonywać żadnych konwersji ani robic ifologii.

1

Nie rób nic. 7 linijek to nie problem, na pierwszy rzut oka widać co to robi. Wrzucisz to w jakąś pętlę i tylko zaciemnisz kod. Sztuka dla sztuki.

3

Ludzie ogólnie boją się ifów (tak jakby gryzły), a przecież jest to najprostszy i wybitnie czytelny zapis branchowania — już ”bardziej czytelnie” się nie da. Podany w tym wątku oryginalny kod da się łatwo przerobić na pętlę, ale w obecnej postaci nie przeszkadza w niczym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1