Ingewikkeldheid: Unity C#
Benodigde Modules: 3D Speler Bewegen
In de vorige module heb je je speler laten bewegen, maar dit gaat nog wel wat stijfjes. Daarom ga je in deze module animaties toevoegen aan je game om deze bewegingen mooier te laten lijken.
Om te beginnen heb je 3D animaties nodig voor je Speler model. Een makkelijke manier om deze te krijgen is via de website Mixamo.com. Je moet hiervoor wel een Adobe account hebben of maken. Als je ingelogd bent klik je op de Upload Character knop rechts om je 3D model te uploaden. Hiervoor moet je in een zip folder de .mtl, .obj en .png bestanden zetten die je via MagicaVoxel hebt verkregen.
Daarna moet je nog een paar dingen instellen, zoals de oriëntatie van het model en de locatie van bepaalde lichaamsdelen. Als dit klaar is en je model goed geüpload is kan je verder gaan.
De volgende stap is om animaties uit te zoeken. In deze module ga je animaties maken en programmeren voor stilstaan, lopen en springen. De Engelse woorden hiervoor zijn ‘idle‘, ‘walk‘ en ‘jump‘. Kies bij de loop animatie voor de optie In Place. Als je een animatie hebt gevonden voor een van deze dingen die je goed lijkt, klik dan download. Let op dat je bij Format kiest voor de optie FBX for Unity. Sla de gedownloade animatie op in de Assets folder van je project.
Ga nu naar Unity en klik op de Idle animatie in je Assets. In de Inspector zet je in het Model tabblad het vinkje achter Convert Units uit. In het Rig tabblad zet je Avatar Definition op Create From This Model. In het Animation tabblad zet je een vinkje achter Loop Time. Klik dan onderaan in de Inspector op Apply om deze veranderingen op te slaan.
Sleep nu deze Idle animatie vanuit de Assets op de naam van je Speler in de Hierarchy. Je zal zien dat er nu twee modellen over elkaar heen staan. Zet op het Speler object het Mesh Renderer component uit of verwijder het. Aan het nieuwe kind object met de naam van de animatie is al een component toegevoegd: de Animator. Dit component zorgt ervoor dat de animaties van het model zullen werken.
Klik nu met je rechtermuisknop in de Assets en ga naar Create en dan Animator Controller. Geef deze de naam van je model met daarachter Controller. Sleep deze Controller in het daarvoor bestemde vakje van het Animator component van je Speler object. Dubbelklik nu op de Controller om het Animator scherm te openen. Hierin ga je instellen hoe en wanneer de verschillende animaties in elkaar overlopen.
Sleep vanuit de Assets nu de drie animaties die je gedownload hebt in de Animator. Begin met de Idle animatie:
Als je nu in Unity op start drukt zal je speler als het goed is al de Idle animatie uitvoeren.
Zet nu bij de Walk animatie in je Assets ook weer Convert Units in het Model tabblad uit en Loop Time in het Animation tabblad aan. Bij de Jump animatie hoef je alleen Convert Units uit te zetten. Vergeet niet op Apply te klikken.
Ga nu weer naar de Animator. Klik linksboven in dit scherm op Parameters, dan op de + en dan op Float.Geef deze float de naam Beweging. Hierdoor kan de Animator straks zien of de Speler beweegt of niet.
Klik nu met de rechtermuisknop op het Idle blokje en kies Make Transition. Klik dan op het Walk blokje om ze te verbinden. Doe nu hetzelfde maar dan vanaf het Walk blokje terug naar Idle.
Klik nu op de verbinding van Idle naar Walk en zet in de Inspector het vinkje achter Has Exit Time uit. Klik dan de + bij Conditions en zorg dat er Beweging Greater 0 staat.
Bij de verbinding van Walk naar Idle zet je Has Exit Time ook weer uit. Klik ook weer op de + en verander Greater in Less en 0 in 0.1.
Ga nu naar het script van de Speler. Om de Animator in het script te gebruiken maak je hiervoor een variabele aan van het type Animator, met de naam Animator. In de Start methode zet je de regel Animator = GetComponentInChildren<Animator>(); om ervoor te zorgen dat deze automatisch wordt ingesteld, ook al is het Animator een component van een kind object.
Zet nu onderaan in de Update methode de volgende regel: Animator.SetFloat(“Beweging”, beweging.magnitude);. Hiermee wordt de float variabele die je net in de Animator gemaakt hebt ingesteld op de magnitude (grootte) van de beweging vector die je bovenaan in de Update methode hebt ingesteld aan de hand van de Input.
Als je alles goed hebt gedaan kan je nu unity starten en zal de Speler eerst de idle animatie vertonen en als je gaat bewegen overgaan in de loop animatie!
Als laatste ga je de Jump animatie toevoegen. Hiervoor is weer maar een enkele regel code nodig. Zet deze binnen de if die bepaalt of de Speler kan springen of niet. De regel is Animator.Play(“Jumping”);. Als jouw Jump animatie een andere naam heeft moet je die tussen de ” “ aanhalingstekens zetten. Ga nu weer terug naar Unity en open het Animator scherm. Maak een verbinding van het Jump blokje naar Idle en van Jump naar Walk. Zorg dat bij deze verbindingen Has Exit Time wel aan staat. Klik op de + bij Conditions van de verbinding tussen Jump en Walk en zorg dat hier Beweging Greater 0 staat. Bij de verbinding van Jump naar Idle moet Beweging Less 0.1 staan. Dit zorgt ervoor dat wanneer de Jump animatie klaar is hij overgaat in Walk als de speler nog aan het bewegen is en in Idle als de speler dat niet is.
Start nu de game om te testen of alles werkt! Als het er niet allemaal mooi uitziet kan je nog dingen aanpassen, bijvoorbeeld de frame waarop de animatie start (in het Animation tabblad van de animatie in de Assets) of de Exit Time (bij Settings in de verbinding in het Animator scherm). Probeer wat dingen uit tot het er wel goed uit ziet!