Problem z pętlą FOR w Unity

Problem z pętlą FOR w Unity

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

As7887
  • Rejestracja:około 4 lata
  • Ostatnio:około 2 lata
  • Postów:16
0

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

Kopiuj
    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?

edytowany 1x, ostatnio: flowCRANE
DZ
  • Rejestracja:ponad 13 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Podaj nazwę miejscowości
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.

As7887
  • Rejestracja:około 4 lata
  • Ostatnio:około 2 lata
  • Postów:16
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ć?

B1
trzeba przekształcić warunek "i > 10", tak by był spełniony dla warunku początkowego (czyli i=1)
T3
  • Rejestracja:ponad 4 lata
  • Ostatnio:7 miesięcy
  • Postów:687
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.
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6656
1

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

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

Osiągniesz takim kodem:

Kopiuj
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


🕹️⌨️🖥️🖱️🎮
edytowany 7x, ostatnio: Spine

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.