Skip navigation

Pálya Újrakezdése

Alapok

Ha már van egy ellenfelünk, akkor azt is érdemes megoldani, hogy valami bímtetés is legyen, ha elkap minket az egyik Zombi. A mi esetünkben ez úgy fog megvalósulni, hogy ha hozzárénk egy zombihoz, akkor a játékos visszakerül a kezdőpozíciójába. Ez jó lehet akkor, ha a cél egy távoli pont elérése. Ilyenkor ugyanis hiba esetén a játékosnak újra meg kell próbálnia kicselezni a megmaradt Zombikat.

A script

A játék újraindítását egy Scriptel-el fogjuk elvégezni.

A Scriptet a játokoson hozzuk létre mondjuk "BackToStart" néven. A Script most hrom részből fog állni.

Először is szükségünk van kezdeti változókra.

    Vector3 startPos;

A változó amire szükséghünk van gyakorlatilag csak a kezdeti pozíció. A célunk ugyanis az, hogy Zombival való találkozás esetén a kezdőpozíciót visszaállítsuk.

Ezt úgy fogjuk megoldani, hogy a játék indulásakor letároljuk, hogy hol is volt a játékos. Ezt a legegyszerűbben a "Start()" függvényben tehetjük meg.

    void Start()
    {
        // pozició letárolasa
        startPos = GetComponent().position;
    }

Ha megvolt a kezdeti pozíció tárolása akkor már csak magával az ütközéssel kell foglalkoznunk. Erre a unity ad nekünk egy "OnCollisionEnter2D(...)" nevű függvényt. Ha ezt a függvényt megírjuk, akkor a keretrendszer meg fogja hívni a függvényket mindig, amikor valamilyen ütközés történt. A függvény paraméterében információkat kapunk az ütközésről, ami segít eldönteni, hogy mit is tegyünk.

Esetünkben az alábbi kódra lesz szükség.

    //  Ütközés esetén
    void OnCollisionEnter2D(Collision2D col)
    {
        //  Ha zombival ütköztünk
        if(col.gameObject.tag == "Zombi")
        {
            //  Akkor vissza a kezdőpozícióra.
            GetComponent().position = startPos;
        }
    }

A program valójában egyszerűen működik. Ha ütközés történt, akkor meghívódi k a fenti függvény.

Itt az első fontos dolog, hogy a függvényünk mindig meghívódik, ha a játékos valamivel ütközik. Ebbe beletartozik a Zombi is, de a fal, föld, és egyéb tárgyak is. Azért, hogy csak a Zombival való ütközést bűntessük le kell ellenőrizni, hogy mivel találkoztunk. Ehhez a "col" paraméter "col.gameObject.tag" értékét hasznájuk. A "col.gameObject" az a GameObject amivel találkoztunk. Ennek a tag-jét (cimkéjét) fogjuk használni, hogy kiderítsük, milyen típusú tárggyal ütköztünk.

Ha kirdeül, hogy "Zombi"-val találkoztunk, akkor nincs mit tenni, a játék újraindul. Ehhez vissza kell álítanunk a pozíciónak a kezdeti állapotra, amit a Start függvényben letároltunk.

Az egész egyben így néz majd ki.

using System.Collections.Generic;
using UnityEngine;

public class BackToStart : MonoBehaviour
{
    Vector3 startPos;

    //  Előkészítés
    void Start()
    {
        // pozició letárolasa
        startPos = GetComponent().position;
    }

    //  Ütközés esetén
    void OnCollisionEnter2D(Collision2D col)
    {
        //  Ha zombival ütköztünk
        if(col.gameObject.tag == "Zombi")
        {
            //  Akkor vissza a kezdőpozícióra.
            GetComponent().position = startPos;
        }
    }

}

Beállítások

Ahogy eddig is szokásos volt, a script elkészültével még nincs vége a feladatainknak. A Unity-n belül még kell egy beállítás, hogy minden működjön.

Fent láttuk, hogy az ütközésnek a kulcsa, hogy ellenőrizzük, hogy mi a tárgy címkéje, amivel éppen ütköztünk. Ezt kell most megadnunk a zombikon.

Ehhez létre kell hoznunk egy "Zombi" címkét (ha még nincs).

Cimke létrehozása 1

Cimke létrehozása 2

Ez után be kell álítanunk a zombi Címkéjét.

Zombi címkéjének megadása