Marek Winiarski

Cykl życia skryptu w Unity3d: Kolejność wykonywania funkcji

Cykl życia skryptu, czyli w jakiej kolejności wykonują się funkcję domyślne dla Unity3d.

Znajomość podstawowych funkcji Unity3d jest wiedzą bardzo przydatną, wręcz podstawową. Warto wiedzieć, czy daną rzecz należy wykonać w funkcji Start, czy Update, czy może Awake. Aby wiedzieć, jak rozsądnie zarządzać pamięcią i mocą obliczeniową komputera, trzeba rozsądnie wykonywać obliczenia. Tzn. po co liczyć coś w każdej klatce, kiedy możemy to policzyć raz na początku. Czasami błędne umiejscowienie kodu jest źródłem wielu problemów.

Mógłbym się tutaj produkować i tworzyć swoje interpretację wielu funkcji, ale to byłoby nieco bez sensu. Dokładałbym ideologię do czegoś, co klarownie jest wyjaśnione w dokumentacji. Ale dokumentacja jest po Angielsku. Dlatego nie będzie tu cudów i fajerwerków, a porządnie przetłumaczony kawałek dokumentacji Unity3d, na temat znaczenia i zastosowania podstawowych funkcji, oraz ich kolejności wykonywania. Dokumentacja nazywa tę funkcję wydarzeniami (eventami), więc możemy stosować też taką nomenklaturę.

Warto tutaj zaznaczyć, że poza kolejnością wykonywania samych funkcji, mamy jeszcze kolejność kompilowania skryptów w języku C#, ale o tym już pisałem.

Edytor

Pierwsze załadowanie sceny

Te funkcję wykonują się raz dla każdego obiektu, w momencie gdy ładuje się scena.

Przed aktualizacją pierwszej klatki

Do przetestowania różnicy między Awake, Start i OnEnabled, można zastosować taki skrypt:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour 
{
	void Awake()
	{
		Debug.Log ("Awake");
	}

	void Start()
	{
		Debug.Log ("Start");
	}

	void OnEnable()
	{
		Debug.Log ("Enabbled");
	}
}

Po wrzuceniu tego skryptu do np. obiektu kamery, należy się pobawić tymi opcjami:

Panel Inspector
Panel Inspector

Jak to powinno działać?

Pomiędzy klatkami

Kolejność aktualizacji klatek

Dokumentacja Unity3d zaleca, aby większość wykonywanych poleceń wrzucać do funkcji Update. Jednak są też inne opcje:

Rendering

Coroutines (współprogramy)

Współprogramy to funkcję, które posiadają zdolność do wstrzymania swojej pracy na pewien czas. Normalnie są one wykonywane po tym gdy wykona się funkcja Update.

Gdy obiekt jest usuwany

W czasie wyłączania

Poniższe funkcję są wywoływane dla każdego aktywnego obiektu w scenie.

Diagram cyklu życia skryptu

Cykl Życia skryptu w Unity3d

I to tyle. Myślę, że ta wiedza pozwoli wam tworzyć bardziej optymalny kod.

Exit mobile version