Warsztat.GDCompo!ProjektyMediaArtykułyQ&AForumOferty pracyPobieranie

Opisz napotkaną sytuację, a redakcja niezwłocznie znajdzie rozwiązanie!

wyślij anuluj

26. Programowanie JS cz.6 : kolejność wykonywania

Tekst został importowany z Warsztatowych artykułów. Jego oryginalnym autorem jest Grzegorz Żak. Jeżeli został importowany poprawnie, usuń ten szablon!

{{Opis|}} KOLEJNOŚĆ WYKONYWANIA
W Unity istnieje szereg funkcji, które są wykonywane w określonej kolejności. Wspominałem już o tym we wcześniejszych częściach, ale tym razem dokładniej opiszę mechanizm kolejnosci wykonywania.


OGÓLNY SCHEMAT KOLEJNOŚCI WYKONYWANIA W SKRYPCIE
1. Wszystkie funkcje Awake
2. Wszystkie funkcje Start
3. W międzyczasie funkcje uzależnione od zmiany czasu
  a) Wszystkie funkcje FixedUpdate
  b) Symulacja fizyki
  c) Funkcje OnEnter/Exit/Stay trigger
  d) Funkcje OnEnter/Exit/Stay collision
4. Interpolacja Rigidbody dotycząca transform.position i rotation
5. Zdarzenia OnMouseDown/OnMouseUp itp.
6. Funkcje Update
7. Animacje
8. Wszystkie funkcje LateUpdate
9. Rendering


PIERWSZE ZAŁADOWANIE SCENY
Funkcje te są wywoływane podczas uruchomienia sceny(raz na każdym z obiektów na scenie).
-Awake
Ta funkcja jest zawsze wywoływana przed jakąkolwiek funkcją Start, a zarazem tuż po załadowaniu Prefabu.
-OnEnable
Funkcja jest wywoływana tuż po tym jak obiekt jest włączony. Wywołanie jej nastąpi jeśli obiekt jest aktywny.

PRZED PIERWSZĄ KLATKĄ AKTUALIZACJI(UPDATE)
-Start
Start jest wykonywany przed pierwszą klatką funkcji stosowanych przy aktualizacji danych(funkcje z Update w nazwie).

KOLEJNOŚĆ AKTUALIZACJI(UPDATE)
-FixedUpdate
Funkcja ta jest często wywoływana częściej niż Update. Jej wywołanie może nastąpić kilka razy na klatkę jeśli szybkość klatek jest niska i może nie być wywołana w ogóle pomiędzy dwiema klatkami jeśli prędkość klatek jest wysoka. Wszytskie obliczenia i aktualizacje fizyki następują natychmiast po FixedUpdate. Jeśli wyliczasz ruch, wewnątrz funkcji FixedUpdate, nie musisz mnożyć swojej wartości przez Time.deltaTime, bo wywołanie funkcji występuje co rzeczywisty odcinek czasu, niezależnie od szykbkości klatek.
-Update
Jej wywołanie występuje raz na każdą klatkę. Jest to główna funkcja używana do aktualizacji danych.
-LateUpdate
Funkcja ta jest wywoływana raz na klatkę tuż po zakończeniu wykonywania zawartości funkcji Update. Przykładem jej zastosowania jest kamera w 3 osobie podążająca za postacią. W Update wyliczamy aktualną pozycję i rotację gracza, a w FixedUpdate pozycje i rotację kamery, dzięki czemu uzyskujemy najbardziej odpowiednie położenie kamery.

RENDERING
-OnPreCull
Wywołanie następuje przed określeniem, które obiekty są widoczne dla kamery(tzw. Culling). Można jej użyć np. do zmiany kąta widzenia kamery zanim ona wyświetli scenę.
-OnBecameVisible/OnBecameInvisible
Wywołanie następuje gdy obiekt staje się widoczny/niewidoczny dla jakiejkolwiek kamery.
-OnWillRenderObject
Wywołana raz dla każdej z kamer jeśli obiekt jest widoczny.
-OnPreRender
Wywołana przed tym jak kamera rozpocznie rendering sceny.
-OnRenderObject
Wywołana po podstawowym renderingu. Można w niej używać klasy GL lub Graphics.DrawMeshNow do renderowania niestandardowej geometrii.
-OnPostRender
Wywołana po tym jak kamera zakończy rendering sceny.
-OnRenderImage(jedynie Pro)
Wywołana po tym jak rendering jest gotowy do wyświetlenia Image Effects.
-OnGUI
Wywoływana wielokrotnie na klatkę w odpowiedzi na zdarzenia GUI. Pierwsze wykonywane są zdarzenia dotyczące Layoutu.
-OnDrawGizmos
Funkcja używana do wyświetlania własnych Gizmos w Widoku Sceny.

COROUTINE(WSPÓŁPROGRAM)
Aktualizacja współprogramów następuje po wykonaniu wszystkich funkcji Update. Coroutines są funkcjami pozwalającymi wstrzymać wykonywanie, aż zakończy się wykonywanie danego polecenia opóźnienia (yield). Więcej o współprogramach w kolejnej części kursu.
-yield
Współprogram będzie kontynuowany po wykonaniu wszystkich funkcji Update w kolejnej klatce.
-yield WaitForSeconds(2)
Kontynuuj po funkjach Update w klatce przypadajacej po ilości sekund określonej w parametrze.
-yield WaitForFixedUpdate()
Kontynuuj po wykonaniu wszytskich funkcji FixedUpdate we wszystkich skryptach.
-yield WWW
Kontynuuj po kompletnym pobraniu WWW.
-yield StartCoroutine(MyFunc)
Kontynuuj po wykonaniu funkcji podanej w parametrze.

PRZY ZAMYKANIU
Funkcje te są wykonywane na wszystkich aktywnych obiektach na scenie:
-OnApplicationQuit
Wywoływana na wszystkich obiektach w grze przed zamknięciem aplikacji. W edytorze następuje to po zatrzymaniu trybu odtwarzania(playmode). W odtwarzaczu przeglądarkowym (web player) jest wywoływana po zamknięciu okna.
-OnDisable
Funkcja jest wywoływana kiedy behaviour zaczyna być wyłączony lub nieaktywny.

To wszystko w tej części jeśli chodzi o kolejność wykonywania poszczególnych elementów w skrypcie. W kolejnej zajmiemy się trochę dokładniej Współprogramami(COROUTINES).

by Grzegorz Żak (sztacheta28) Forum o Unity

Tekst dodał:
Grzegorz Żak
10.08.2011 00:24

Ostatnia edycja:
Grzegorz Żak
10.08.2011 00:24

Kategorie:

Aby edytować tekst, musisz się zalogować.

# Edytuj Porównaj Czas Autor Rozmiar
#1 edytuj 10.08.2011 00:24 Grzegorz Żak 5.57 KB
Zwykły
Do sprawdzenia
Do akceptacji
  • Tomasz [Shinra Games] (@TomaszShinraGames) 11 sierpnia 2011 20:40
    Generalnie wszystko ok - tutoriale są naprawdę niezłe , ale akurat jeśli chodzi o kolejność wykonywania funkcji to sporo się zmieniło w ostatniej wersji - 3.4. Cytując dokumentację Unity :

    Scripting Execution Order: Unity now gives you explicit control over the execution order in your scripts. Awake, OnEnable and Update calls are sorted by execution order. Execution order can be defined on a ‘per script’ basis in an easy-to-understand dialog.
  • Napisz komentarz:
    Aby dodać swój komentarz, musisz się zalogować.
Licencja Creative Commons

Warsztat używa plików cookies. | Copyright © 2006-2017 Warsztat · Kontakt · Regulamin i polityka prywatności
build #ff080b4740 (Tue Mar 25 11:39:28 CET 2014)