Ingewikkeldheid: Unity 1 out of 5 stars C# 2 out of 5 stars

Benodigde Modules: Geen.


In deze module ga je een gevaarlijk rotsblok maken dat naar beneden rolt wanneer de speler in de buurt komt en ga je oefenen met colliders/triggers.


Om te beginnen heb je weer een plaatje nodig. Hier zijn weer wat voorbeelden, maar je kan ook zelf een plaatje zoeken/maken.

   

Zet dit plaatje weer in de Assets en sleep het daarna ergens in je level.


Het Rotsblok object is nu alleen nog maar een plaatje, dus moet je weer wat componenten toevoegen. Om het rotsblok te laten bewegen is er een Rigidbody2D component nodig, dus voeg dat toe via de Add Component knop in de Inspector. Voeg ook een Circle Collider 2D toe, zodat het object tegen andere objecten aan kan botsen.

Als je het rotsblok te klein vindt en het groter wil maken kan dat door de getallen die bij X en Y bij Scale in het Transform component staan groter te maken.

Omdat het rotsblok gevaarlijk moet zijn en het level opnieuw moet beginnen wanneer de Player het aanraakt kan je het Gevaar script dat je in de basislessen gemaakt hebt moeten toevoegen.

Het object moet nu deze componenten hebben:

Het Gevaar script werkt nu nog niet, want in het script werkt het alleen met colliders die ingesteld zijn als trigger. Triggers zijn objecten die wel voor het script aangeraakt kunnen worden, maar die niet tegen elkaar aanbotsen.

Om dit op te lossen moet je het Gevaar script aanpassen zodat het zowel met triggers als normale colliders werkt. Open Visual Studio door te dubbelklikken op een script.


Het level opnieuw starten wanneer de Player dood gaat gebeurt nu in de Gevaar klasse. Dit werkt voor nu maar het is handiger om dat in de Player class te doen. Er kunnen bijvoorbeeld ook andere manieren komen waardoor de Player dood kan gaan en het is handig om dan altijd dezelfde methode te gebruiken.

Maak dus onderaan in de Player class (voor het laatste } haakje) een methode met de naam Dood(). Als je niet meer weet hoe je een methode maakt of wat het precies is kan je de basisles over methodes nog eens bekijken. Het type van deze methode is weer void. Het is ook belangrijk dat je er public voor zet, want je moet deze methode vanuit andere klassen kunnen gebruiken.

Tussen de { } haakjes van deze methode zet je de regel ‘SceneManager.LoadScene SceneManager.GetActiveScene().name;‘, die je nu in het Gevaar script hebt staan. Je kan hem daar dus uit knippen(of kopiëren)/plakken.

Als je hem kopieert komt er een rood lijntje onder SceneManager, omdat je bovenin dit script nog niet using UnityEngine.SceneManagement; hebt staan. Als je op het lampje klikt dat verschijnt als je je muis boven het lijntje houdt, dan kan je het met de bovenste optie er automatisch neer laten zetten. Je kan het natuurlijk ook zelf typen.


Ga nu naar het Gevaar script. Als je de regel met SceneManager nog hebt staan in de OnTriggerEnter2D() methode dan kan je die weghalen. In plaats daarvan moet op die regel (na de if()) de Dood() methode van de Player klasse aangeroepen worden. Om die te kunnen gebruiken gebruik je hetzelfde wat tussen de haakjes van die if() staat: collision.gameObject.GetComponent<Player>()‘.

Met dat stukje code krijg je het Player script component. In de if gebruikte je het om te kijken of het script bestond, maar als je er een punt achter zet kan je ook de dingen die erbij horen aanpassen of gebruiken. Zet dat stukje code op de regel na de if() en zet er een punt achter. Visual Studio geeft je dan een lijstje van alle dingen die je kan gebruiken, inclusief de Dood() methode. Kies die dus uit de lijst en vergeet de { } haakjes en puntkomma niet:


Om er nu voor te zorgen dat dat ook gebeurt als het object waar het Gevaar script aan toegevoegd is een normale collider is (dus geen trigger) moet je ook weer de OnCollisionEnter2D() methode maken door onderaan in de klasse ‘oce2’ te typen en dan op enter te drukken. In die methode zet je precies hetzelfde als in de OnTriggerEnter2D() methode, dus je kan die twee regels daaruit kopiëren. De Gevaar klasse ziet er nu als het goed is zo uit:

Vergeet niet om de Player en Gevaar scripts op te slaan met Ctrl+S. Je kan ook Ctrl+Shift+S doen om alle scripts in een keer op te slaan. Ga dan weer terug naar Unity.


Nu werkt het Gevaar script als je het aan het rotsblok object toevoegt. Dit kan je even uittesten. Nu moet je er nog voor zorgen dat het rotsblok eerst stil staat en als de Player in de buurt komt gaat bewegen. Het rotsblok stil zetten kan je doen door in het RigidBody2D component het Body Type op Static te zetten in laats van Dynamic.

Nu moet je er nog voor zorgen dat het Body Type weer op Dynamic wordt gezet wanneer de Player in de buurt komt. Hiervoor maak je weer een nieuw script met je rechtermuisknop in de Assets te klikken en naar Create -> C# Script te gaan. Noem dit script RotsblokTrigger en open het in Visual Studio door er op te dubbelklikken.

In dit script kan je de Start() en Update() methodes verwijderen. Maak nu bovenaan een variabele van het type Rigidbody2D met de naam Rotsblok. Maak dan de OnTriggerEnter2D() methode door ‘ote2’ te typen en dan op enter te drukken.

In deze methode maak je weer een if() die kijkt of de collision een Player script component heeft, net als in het Gevaar script, dus je zou hem daar ook uit kunnen kopiëren. Op de regel na de if() zet je een instructie die het Body Type van het Rotsblok weer op Dynamic zet: ‘Rotsblok.bodyType = RigidbodyType2D.Dynamic;‘. Het script moet er nu zo uit zien:

Als dit klopt, sla het dan op en ga terug naar Unity.


In Unity maak je een leeg Game Object door met je rechtermuisknop in de Hierarchy te klikken en dan op Create Empty. Noem dit object RotsblokTrigger en voeg er het RotsblokTrigger script en een BoxCollider2D aan toe. Stel dan de Rotsblok variabele van het script component goed in door het Rotsblok vanuit de Hierarchy naar het vakje er achter te slepen. Klik ten slotte Is Trigger aan in het Box Collider 2D component om er een trigger van te maken:

Wanneer de Player dus deze Box Collider 2D trigger aanraakt zal het script er voor zorgen dat het rotsblok weer kan bewegen. Met de Edit Collider knop kan je deze trigger zone groter maken.

Bij het rotsblok is het misschien ook handig om de Gravity Scale hoger te maken, zodat het rotsblok sneller naar beneden valt/rolt. Je kan het rotsblok ook uit het zicht in de lucht laten hangen zodat het opeens uit de lucht komt vallen wanneer de Player de trigger binnenloopt.

Categorieën: Modules

guest
0 Reacties
Inline feedbacks
Bekijk alle reacties