My Island Deel 4: (Extra) Stap 10

(Extra) Stap 10: Een deur naar een ander level

Open de _Scripts map in de Project view en maak daarin een nieuw C# script met bijvoorbeeld de naam LevelTriggerScript.
Dit kun je doen door in de _Scripts map te klikken met de rechtermuisknop en hierna Create > C# Script te kiezen of in de menu balk: Assets > Create > C# Script.

Koppel het script aan de TeleportTrigger en verwijder het TeleportScript component of zet het op inactief door het script component uit te vinken.

Screen Shot 2016-04-05 at 15.34.40

Open het script in MonoDevelop door erop te dubbelklikken en zorg ervoor dat je code er zo uitziet, de Start () en Update () functies worden niet gebruikt dus die kun je verwijderen:

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class LevelTriggerScript : MonoBehaviour {

    public string nextLevelName;
    
    void OnTriggerEnter (Collider speler)
    {
        SceneManager.LoadScene(nextLevelName);
    }
}

Sla het script op met Ctrl+S en keer terug naar Unity.

In de inspector view is nu een leeg vakje in het script verschenen met ‘Next Level Name‘.
Schrijf hierin de naam van het level dat je wilt laden. Dus de naam van de scene file in het _Scenes mapje. Als je volgende level ‘Level 2’ heet vul je dat dus in.

Screen Shot 2016-04-05 at 15.25.51

Het laatste wat nodig is om de LoadScene functie te laten werken is de twee of meerdere levels die je gebruikt toe te voegen aan de ‘build settings’. Dit is een lijst waarin je de levels die echt in je uiteindelijke spel komen moet zetten. De scenes die je niet in je uiteindelijke spel wilt hebben, bijvoorbeeld test scenes, worden dan niet in het uiteindelijke spel bestand gestopt als je het spel tot een echt speelbaar spel maakt/’build’.

Ga in de menu balk naar File > Build Settings.
Sleep de scene files van je levels uit de _Scenes map naar het Scenes In Build vak van het Build Settings venster.

Screen Shot 2016-04-05 at 15.04.24

Hierna kun je het venster sluiten, dus zonder op build of build en run te klikken.
Je deur naar het volgende level is nu gereed voor gebruik!

Nadat je de level trigger hebt getest kun je eventueel teruggaan naar het Build Settings venster en op Build klikken. Selecteer als locatie bijvoorbeeld het bureaublad en geef het bestand de naam van je game.
Unity maakt dan een .exe (windows) of .dmg (mac) bestand van je game die je daarna buiten Unity als een echte game kan spelen!

Extra uitleg over de code

Zoals je ziet is er bovenaan in het LevelTrigger script een regel code met
using UnityEngine.SceneManagement; bijgekomen. Deze regel is nodig omdat de functie die het volgende level laad afkomstig is van de ‘class’ SceneManagement.
Om de level laad functie te gebruiken moet er dus aangegeven worden dat we van die externe class SceneManagement gebruik maken.
SceneManagement is simpelweg een ander script waarvan we de functies naar ons eigen script importeren.

De regel boven de OnTriggerEnter () functie met public string nextLevelName; is een public/publieke variabel van het type string met de naam nextLevelName. Omdat deze variabel public is kunnen we de waarde ervan, dus de naam van het volgende level, in de Inspector view invullen. Als je dit niet in de inspector wilt doen zou je de waarde van nextLevelName ook in je script kunnen toewijzen op de volgende manier:

public string nextLevelName = "Level 2";

En als je de variabel ‘private’ maakt in plaats van ‘public’ is deze helemaal niet in de Inspector view te zien.

In de OnTriggerEnter () functie staat nu de regel code SceneManager.LoadScene(nextLevelName);. Dit is de functie die het volgende level laad en om die functie te laten weten om welk level het gaat wordt de variabel met de naam van het volgende level erin gestopt, dus via de haakjes die iedere functie achter de functie-naam heeft staan.
Je zou in plaats van een variabel van een string ook direct de naam van het volgende level in string formaat in de functie kunnen stoppen als volgt:

SceneManager.LoadScene("Level 2");

Het nadeel hiervan is dat je dan voor ieder level een apart script moet maken dus dat is minder handig. Dit nadelige principe wordt in de programmeer-wereld ‘hard-coding’ genoemd.

GreenArrowLeft  Stap 9

Advertisements

Powered by WordPress.com.

Up ↑

%d bloggers like this: