Werken met prefabs

uit de cursus Starten met Unity

Leuk dat je onze site bezoekt,

Ben jij leergierig?. Jij abonnee en dan ik geef jou 5% korting op de eerste maand! Wat vind je daar van? gebruik als kortingscode: DIEHARD

Volgende video: Werken met externe assets

Geef een reactie of stel een vraag

Geef een reactie

Registreer als je wilt reageren.

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Starten met Unity

perm_identity Hans Wichman | video_library 21 video's | query_builder 01:33

Snel op weg met Unity

Unity is een populaire game engine, gratis voor persoonlijk gebruik, om 2D en 3D games mee te maken. In dit uitgebreide en complexe pakket kun je vrijwel alles maken wat je maar kan bedenken op game gebied, maar dat zorgt er vaak ook voor dat je als nieuwkomer geen idee hebt waar je moet beginnen. In deze bijna 1,5 uur durende cursus neem ik je in vogelvlucht mee door alle beginstappen en basisprincipes, terwijl je bouwt aan je eerste eigen Unity product.

 

Wat ga je leren?

In deze cursus leg ik je stap voor stap uit:

  • Wat Unity is en wat je met Unity kan.
  • Waar je Unity kunt vinden en hoe je Unity kunt installeren.
  • Wat de basis kennis & vaardigheden zijn die je minimaal nodig hebt om met Unity aan de slag te gaan:
    • Hoe de Unity interface werkt.
    • Wat Scenes, GameObjecten, Componenten, Assets en Prefabs nou precies zijn.
    • Hoe je zelf een eenvoudige omgeving kunt maken waar je in rond kunt lopen.

Alles wat je leert, pas je direct in de praktijk toe en daarvoor hoef je op dit moment nog helemaal niets van Unity af te weten.

In de vorige video hebben we onze Scene opgeruimd.

Nu dat alles mooi overzichtelijk en gestructureerd is,

ga ik je in deze video uitleggen wat Prefabs zijn,

hoe je met Prefabs werkt,

en wat er de voordelen van zijn.

Hiervoor wil ik je eerst een probleem laten zien,

wat zich voordoet als we geen Prefabs gebruiken,

en dat is het volgende.

We kunnen in onze Scene namelijk eenvoudig een GameObject selecteren,

bijvoorbeeld het huis,

en deze door middel van dupliceren

op verschillende plekken in onze Scene plaatsen.

Dat werkt prima, maar als ik achteraf toch nog iets aan deze huizen wil veranderen,

bijvoorbeeld de kleur van de deur,

of hoeveel ramen ik heb,

dan zal ik voor ieder huis langs moeten.

Om dat te voorkomen kun je een GameObject veranderen in een zogenaamde Prefab.

Een Prefab is ding waarmee je een GameObject met al zijn eigenschappen

kunt opslaan als asset in de ProjectWindow.

En dat doe je als volgt:

je maakt eerst een folder aan in je project window genaamd Prefabs...

en vervolgens sleep je dan je GameObject uit de HierarchyWindow in deze Prefabs folder

We noemen dit ook wel het omzetten, danwel converteren van je GameObject naar een Prefab.

Je ziet daarbij dingen veranderen:

Ten eerste verschijnt je GameObject als Asset in je Prefabs folder.

Ten tweede is deze asset ook gelijk geselecteerd

zodat je m hier rechts kunt bewonderen.

Zie je daar helemaal niets, dan moet je even keer klikken op deze balk,

of m handmatig verslepen.

En ten derde wordt het icoon van je versleepte GameObject in je Scene blauw.

Zo een GameObject met een blauw icoon noemen we ook wel een Prefab instantie.

We hebben nu dus huis wat een prefab instantie is,

gemaakt uit deze prefab asset,

en normale huizen die er toevallig op lijken, maar niets met prefabs te maken hebben.

Wil ik nu meerdere huizen aan mijn Scene toevoegen,

dan heb ik mogelijkheden.

Ik kan mijn prefab instantie gewoon dupliceren net zoals voorheen

of ik kan mijn prefab asset vanuit de project window in mijn Scene slepen

Mocht je huis daarbij door de vloer verdwijnen,

dan moet je de knop hierboven even op center zetten.

Welke manier je ook gebruikt,

in beide gevallen is het icoon van deze nieuwe huizen ook blauw.

Dit zijn dus allemaal instanties van dezelfde huis prefab.

Maar wat hebben we hier nou aan?

Wat is nou het bijzondere van prefabs?

Het bijzondere is dat ik op zo een Prefab asset dubbel kan klikken,

en daarmee ineens in een aparte test scene terecht kom,

waar in ik mijn prefab van alle kanten kan bewonderen en bewerken.

Zo kan ik bijvoorbeeld de kleur van mijn dak veranderen,

de schoorsteen weghalen,

wat je maar wilt.

Ga ik nu weer terug naar mijn oorspronkelijke Scene

door hier linksboven op Scenes te klikken,

dan zie je dat al mijn prefab instanties ook zijn aangepast.

Dat scheelt je in de praktijk,

zeker als je veel dezelfde objecten in je scene hebt,

ontzettend veel tijd.

Het mooie van prefabs is ook,

dat ik nog steeds onderdelen van mijn prefab instanties aan kan passen.

Zo kan ik bijvoorbeeld het dak van dit huis groen maken.

Ga ik daarna weer terug naar Prefab edit mode

dan zie ik dat dit de Prefab zelf verder niet veranderd heeft.

Nu ga ik nog een stap verder door in deze Prefab,

de kleur van het dak en de deur oranje te maken.

Wissel ik vervolgens weer terug naar mijn oorspronkelijke Scene,

dan zie je dat iedere prefab instantie inderdaad veranderd is,

maar ook dat het dak van deze instantie, zijn unieke kleur behouden heeft.

Als ik dit game object selecteer en hier in de Inspector deze overrides dropdownbox open,

dan kan ik precies zien wat ik wel of niet gewijzigd in de prefab instantie

ten op zichte de onderliggende prefab.

Zo zie je hier bijvoorbeeld dat ik het MeshRenderer component

van GameObjecten heb aangepast,

dat klopt ook, namelijk de kleur van allebei de dakdelen.

Welk deel van die Componenten ik precies heb aangepast,

kun je zien aan de dikgedrukte tekst,

en dat is in dit geval dus het Materiaal veld.

Zo een wijziging kun je, indien gewenst, Reverten of Applyen.

Met de knop Revert kun je een bepaalde wijziging ongedaan maken.

Dat betekent dat die waarde in je prefab instantie,

weer terug springt naar de waarde die dat specifieke veld in je prefab had.

In mijn Prefab is het dak oranje,

en in mijn prefab instantie is ie groen.

Met andere woorden,

druk ik op Revert dan wordt het dak van mijn prefab instantie ook weer oranje.

Met de optie Apply daarentegen doe je precies het tegenovergestelde.

Dit zorgt ervoor dat de waarde van je prefab instantie

wordt overgezet naar de onderliggende Prefab.

Apply ik bijvoorbeeld de materiaal wijziging in het rechterdak,

dan wordt dat dak in de onderliggende prefab ook groen,

waardoor vervolgens het dak van alle andere instanties ook veranderd.

Alhoewel je achteraf,

dus nog op verschillende manieren onderdelen van je Prefab instanties kunt veranderen,

zijn er ook wat beperkingen.

Zo kun je bijvoorbeeld niet zomaar een kind van een Prefab instantie verwijderen.

Probeer je dat wel, dan krijg je deze waarschuwing.

Hier zie je gelijk alle dingen opgenoemd

die je dus niet meer mag doen met een Prefab instantie.

Samengevat, je mag geen kinderen verwijderen uit een prefab instantie

en je mag niet de volgorde van kinderen of componenten veranderen.

Wil je dat wel, dan kan dat alleen maar door de onderliggende Prefab te editten.

Nu dat we weten hoe prefabs werken en hoe ik ze aan kan maken,

kan ik dus voor al mijn objecten naar een Prefab omzetten.

Daarbij is het altijd goed om eerst even na te denken

over welke objecten je nou wel of niet precies wilt omzetten.

Hou daarbij vooral het doel van prefabs in je achterhoofd en dat is:

eenvoudig duplicaten van objecten in je Scene kunnen plaatsen ...

zodat je ze achteraf nog zonder problemen aan kan passen.

Aangezien ik in dit geval een klein dorpje wil bouwen,

betekent dat, dat mijn huis, sneeuwpop, boom etc hier allemaal voor in aanmerking komen.

Omdat ik mijn huis inmiddels vakkundig gesloopt heb,

open ik eerst even mijn Scene opnieuw zonder mijn wijzigingen op te slaan,

verwijder vervolgens mijn huis prefab,

en converteer ik alle objecten die ik meerdere keren wil gebruiken naar prefabs.

Nou zou ik het daarbij kunnen laten,

maar omdat ik dit perceel ook als geheel wil dupliceren,

maak ik daarnaast ook nog een Perceel GameObject aan,

nest alle perceel onderdelen daarin als kind,

en converteer vervolgens dat perceel ook naar een Prefab.

Zo hebben we dus Prefabs binnen Prefabs.

Vervolgens selecteer ik mijn Perceel instantie,

dupliceer deze om een straatje te maken,

en selecteer, dupliceer en roteer dan de hele straat om een dorpje te maken.

Ook daarbij is de stand van de center/pivot knop weer belangrijk.

Staat deze op center, dan draait de hele straat om het centrum van je selectie,

maar staat deze op pivot, dan draait ieder Perceel om zijn eigen centrum.

Ik laat deze dus op centrum staan, en draai en verplaats de hele straat.

Tot slot die ik hetzelfde nog een keer met beide straten geselecteerd.

Na het plaatsen van al je percelen

kun je de verschillende instanties nog wat aanpassen.

Denk daarbij bijvoorbeeld aan de plaats,

rotatie

en schaal

van je afzonderlijke kind objecten.

Verwijderen van objecten kan dan weliswaar niet,

maar indien gewenst, kan ik sommige objecten wel gewoon uitzetten,

met dit vinkje hier rechtsboven in de Inspector.

Op deze manier hebben we met het gebruik van prefabs

redelijk snel een eenvoudig stadje kunnen bouwen

waarin we achteraf nog van alles kunnen aanpassen en vervangen.

Vooral dit laatste is interessant als we gaan werken met assets uit de AssetStore.

Probeer eerst maar eens de objecten in je eigen Scene om te zetten naar Prefabs,

en dan zul je in de volgende video zien

hoeveel plezier je hebt van al het voorwerk dat je hier gedaan hebt.