Zrozumienie prefabrykatów i instancji
Tworzenie instancji i niszczenie obiektów jest uważane za bardzo ważne podczas rozgrywki. Tworzenie instancji oznacza po prostu powołanie do istnienia. Przedmioty pojawiają się lub „odradzają” w grze, wrogowie giną, elementy GUI znikają, a sceny są ładowane przez cały czas w grze. Wiedza o tym, jak właściwie pozbyć się niepotrzebnych przedmiotów i jak sprowadzić te, które robisz, staje się jeszcze bardziej istotna.
Najpierw zrozumiemy, co prefabssą. Gotowe elementy są uważane za ważne, aby zrozumieć, jak działa instancja w Unity.
Prefabs są jak blueprintsGameObject. Prefabrykaty są w pewnym sensie acopyGameObject, który można powielić i umieścić w scenie, nawet jeśli nie istniał, gdy scena była tworzona; innymi słowy, można używać prefabrykatówdynamically generate GameObjects.
Aby utworzyć prefabrykat, wystarczy przeciągnąć żądany GameObject z hierarchii scen do projektu Assets.
Teraz, aby utworzyć wystąpienie GameObject, wywołujemy plik Instantiate()w naszym skrypcie. Ta metoda, zdefiniowana wMonoBehaviour, przyjmuje GameObject jako parametr, dzięki czemu wie, który GameObject utworzyć / powielić. Ma również różne nadpisania do zmiany transformacji nowo utworzonego obiektu, a także rodzicielstwa.
Spróbujmy utworzyć nową instancję hexagon kiedykolwiek Space wciśnięty.
Utwórz nowy skrypt o nazwie Instantiatori otwórz. wUpdate wpisz poniższy kod.
Tutaj używamy GetKeyDown metoda Inputklasy, aby sprawdzić, czy gracz nacisnął określony przycisk podczas ostatniej klatki. Ponieważ chcemy, aby ciągle sprawdzał, umieściliśmy goUpdate, który działa 60 razy na sekundę. Zwraca metoda GetKeyDowntrue jeśli klucz określony przez KeyCode enum (które zawiera listę wszystkich możliwych klawiszy na standardowej klawiaturze) jest wciśnięte w tej ramce.
public class Instantiator : MonoBehaviour {
public GameObject Hexagon;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
Instantiate(Hexagon);
}
}
}
Publiczna deklaracja GameObject na górze tworzy slot podobny do tego, który stworzyliśmy dla Rigidbody2D w naszych poprzednich lekcjach. Ten slot akceptuje tylkoprefabs (w czasie redakcji) i gameObjects (w czasie wykonywania).
Zapisz skrypt i pozwól mu się skompilować. Po zakończeniu utwórz nową,empty GameObject, przechodząc do menu hierarchii obiektów prawym przyciskiem myszy i wybierając Create Empty.
Nazwij ten obiekt czymś rozpoznawalnym, na przykład Instatiator Objecti dołącz do niego nasz nowo utworzony skrypt. W slocie, który pojawia się dla GameObject, przeciągnij utworzony przez nas prefabrykat.
Jeśli teraz uruchomimy grę, naciśnięcie spacji utworzy nowy obiekt Hexagon, identyczny z tym, którego użyliśmy do stworzenia prefabrykatu. Możesz zobaczyć każdy tworzony sześciokąt w hierarchii obiektów. Powodem, dla którego nie możesz ich zobaczyć w grze, jest to, że na razie wszystkie są tworzoneexactly jeden nad drugim.
Podczas następnej lekcji zrozumiemy pojęcie niszczenia obiektów.