Wątek przeniesiony 2022-04-28 21:27 z Java przez furious programming.

Problem z pętlą FOR w Unity

0

WItam mam problem z pętlą FOR w Unity. Napisałem taki skryp:

    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            for (int i = 1; i > 10; i += 1)
            {
                transform.Translate(Vector3.up * 10 * Time.deltaTime);
            }
        }
    }

Kod ma Sprawić, że po kliknięciu spacji objekt będzie się poruszał dopóki i nie będzie równe 10.
Jednak kod nawet nie zmienia wartości i. Wie ktoś co jest źle?

2

Spójrz na składnię "for"; tam podaje się warunek kontynuowania pętli, a Ty dałeś "i > 10" co jest nieprawdziwe już za pierwszym razem. Dlatego pętla nie działa.

0
dziobu napisał(a):

Spójrz na składnię "for"; tam podaje się warunek kontynuowania pętli, a Ty dałeś "i > 10" co jest nieprawdziwe już za pierwszym razem. Dlatego pętla nie działa.

dzk, ale jak w takim razie mam zrobić?

2

@As7887: twoj blad jest podobny do bledu starej baby w ponizszym dowcipie:

Idzie student fizyki ulicą, zaczepia go babka:

  • Do kościoła to dobry kierunek?
  • Dobry – odpowiada student.
    Babka odchodzi, a student do siebie:
  • Kierunek dobry, ale zwrot przeciwny.
1

@As7887: To co próbujesz zrobić tym kodem:

for (int i = 1; i > 10; i += 1)
{
    transform.Translate(Vector3.up * 10 * Time.deltaTime);
}

Osiągniesz takim kodem:

transform.Translate(Vector3.up * 100 * Time.deltaTime);

Twoja pętla przesunie obiekt 10 razy o 10 jednostek w górę.
Na ekranie nie zobaczysz żadnej animacji. Nie zobaczysz 10 efektów poszczególnych iteracji. Zobaczysz tylko efekt końcowy, osiągnięty gdy cała pętla się wykona.
Dlatego Twoją pętlę można wyrzucić i od razu przesunąć obiekt jeden raz o wynik mnożenia. Efekt taki sam.

Poza tym obiekt bardzo szybko zniknie z pola widzenia, bo użyłeś GetKey(). Dopóki wciśnięty jest klawisz, to w każdej klatce będzie wykonywane Translate(). Użyj GetKeyDown(), żeby reagować na pojedyncze wciśnięcie klawisza.


Jeśli chcesz zrobić "animację" przesunięcia o 10 kroków, zaimplementuj do tego Coroutine.
https://docs.unity3d.com/Manual/Coroutines.html

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