logo

Prefabs en instantiatie begrijpen

Het instantiëren en vernietigen van personages of objecten is heel gebruikelijk in elk spel. Instantiëren betekent het object tot stand brengen. Objecten verschijnen of spawnen of genereren in een spel, vijanden sterven, GUI-elementen verdwijnen en scènes worden voortdurend in het spel geladen.

Prefabs zijn erg handig als u ingewikkelde GameObjects of een verzameling GameObjects tijdens runtime wilt instantiëren. Vergeleken met het helemaal opnieuw maken van GameObjects met behulp van code, is het instantiëren van prefabs met behulp van code beter, en het heeft veel voordelen.

Laten we begrijpen wat prefabs zijn; omdat prefabs belangrijk worden geacht om te begrijpen hoe instantiatie werkt in Unity.

java-arraylijst

Prefab zijn als blauwdrukken van een GameObject. We kunnen dus zeggen: Prefabs zijn een kopie van een GameObject die kan worden gedupliceerd en in een scène kan worden geplaatst, zelfs als deze nog niet bestond toen de scène werd gemaakt; met andere woorden, prefabs kunnen worden gebruikt om GameObjects dynamisch te genereren.

Laten we een prefab maken; Hiervoor moet u het gewenste GameObject uit uw scènehiërarchie naar de projectmiddelen slepen.

Rajinikanth
Prefabs en instantiatie begrijpen

Om een ​​GameObject te instantiëren, roepen we in ons script de methode Instantiate() aan. Deze methode is beschikbaar in MonoBehaviour en neemt een GameObject als parameter op, zodat het weet welk GameObject moet worden gemaakt of gedupliceerd. Het heeft ook verschillende overschrijvingen voor het wijzigen van de transformatie van het nieuw geïnstantieerde object, evenals voor ouderschap.

Maak nu een nieuw script met de naam Instantiator.cs en kopieer de volgende code daarin.

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Instantiator : MonoBehaviour { public GameObject Diamond; // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Instantiate(Diamond); } } } 

In het bovenstaande programma gebruikten we de GetKeyDown-methode van de Input-klasse om te controleren of de speler tijdens het laatste frame op een specifieke knop heeft gedrukt. De methode GetKeyDown() retourneert true als de sleutel die is opgegeven door de KeyCode-enum (die wordt gebruikt om alle mogelijke toetsen op een standaardtoetsenbord weer te geven) in dat frame wordt ingedrukt.

Sla het script op. En maak nu een leeg GameObject door met de rechtermuisknop op de scène te klikken vanaf het tabblad Hiërarchie.

vervang alle Java
Prefabs en instantiatie begrijpen

Voeg dat scriptbestand (Instantiator.cs) toe aan de nieuw gemaakte GameObject-component via het tabblad Inspector.

Nu hebben we in de Diamond variabele drag die prefab gemaakt.

Prefabs en instantiatie begrijpen

Wanneer je het spel nu uitvoert, wordt door op de spatiebalk te drukken een nieuw Diamond-object gemaakt dat identiek is aan het object dat we hebben gebruikt om het prefab-object te maken. U kunt zien dat elke diamant is gemaakt in de objecthiërarchie. De reden dat je ze niet in het spel ziet verschijnen, is dat ze voorlopig allemaal precies boven elkaar worden gemaakt. Maar u kunt het verifiëren via het tabblad Hiërarchie. Elke keer dat u op een spatiebalk drukt, wordt deze op het tabblad weergegeven als een diamant (kloon).

Prefabs en instantiatie begrijpen