Így készíthetsz FPS-t a Unityben

|

A belső nézetes játékok világába indítjuk el legújabb túránkat, és bemutatjuk, miként alapozhatod meg saját virtuális lövöldédet.

Jó néhány lövöldözős játékot találhatsz a videojáték-ipar megkerülhetetlen alapkövei között, nem véletlen, hogy mind a mai napig viszonylag gyorsan megjelennek a legkülönfélébb retró címek (Doom és társai) a friss platformokon is.

A játékosokat tökéletesen képes a kijelző elé tapasztani a "menj előre, és lőj le mindent, ami szembejön" forgatókönyv. Egy 3D-s FPS játék elkészítéséhez ma már csupán egy jó ötletre és néhány kiegészítő csomagra van szükséged, a többit akár egyedül is megvalósíthatod. Cikkünkben megmutatjuk, hogyan készítheted elő a terepet egy lövölde számára, amelynek alapjait továbbgondolva ütőképes játékot faraghatsz belőle.

Komponensek beszerzése

Túlzottan sok kiegészítőre nem lesz szükséged. Jelen esetben csupán egy olyan váz elkészítése a cél, amelyre a későbbiekben merészebb elképzeléseidet építheted. A Unity elindítását követően hozz létre egy 3D-s projektet, ha pedig már fut a program, keresd fel az Asset Store-t, ahol elsőként szerezd be a Standard Assets csomagot. A letöltés végeztével kattints a megjelenő Import-gombra, aminek hatására egy felugró ablak fogad, ezen belül kiválaszthatod, hogy a teljes csomagból mely komponenseket szeretnéd a projektbe átemelni.

Amennyiben spórolnál a hellyel, nyugodtan megjelölheted szükségtelenként az olyan opciókat, mint a demóalkotások és a 2D-s mappák, ellenben a Cameras, a Characters, a ParticleSystems, a Utility és az Environment könyvtárak nélkül semmiképp sem boldogulnál. A beemelést követően a környezet és a karaktermozgás már a rendelkezésedre áll, fegyvert azonban nem tartalmaz ez a csomag, ezért ismételten az Asset Store segítségét kell kérned.

Miután beléptél, a keresőmezőbe gépeld be a Modern Weapons Pack kulcskifejezést, és a megjelenő lehetőségek közül válaszd az első, ingyenes opciót. Hasonlóan a Letöltés- és az Importálás-gomb segítségével csatolhatod projekthez a fegyvereket, amelyek között remek modellek állnak a rendelkezésedre.

A jelenet elkészítése


Ha már minden alapvető építőelem a helyére került, elkezdheted összeállítani játékkoncepciódat. Kezdetben felesleges túlgondolnod a jelenetet, mindössze a funkciók működése a cél, később majd ráérsz csinosítgatni. Első lépésként hozz létre egy Terrain elemet a bal oldali Hierarchy fül legördülő menüjének 3D Objects menüpontjából. Az elkészített területen az Inspector nézetben (az objektum kijelölésekor megjelenő jobb oldali menüsáv) mindössze a méretén kell módosítanod, hogy ne legyen túlzottan nagy a világ.

Kattints a fogaskerék alakú ikonra, és keresd meg a Mesh Resolution érték alatti opciókat, ahol a Terrain Width és a Terrain Length értékét állítsd 200-ra. Ezenkívül a fent található Transform mező Position sora melletti x- és z-értékeket állítsd 100-ra, így a referenciaként egyszerűen használható 0,0 érték pontosan a pályád közepén lesz majd. Ezek után a Projekt mappanézetének Standard Assets könyvtárában folytasd az alapkomponensek felkutatását.

Itt navigálj a Characters/FirstPersonCharacter útvonalon keresztül a Prefabs alkönyvtárba, ahol megtalálod - FPSController néven - vezérelhető játékoskarakteredet. Húzd a Hierarchy fülre, majd itt a listában jelöld is ki, és a jobb oldali Inspector felületen a koordinátáinak segítségével küldd a pálya közepére a Transform szekció alatt található Position x és z koordinátákkal. Mivel ez a karakter saját vezérelhető kamerát tartalmaz, a jelenetedben alapértelmezetten elhelyezett MainCamera objektumot bátran törölheted (esetleg deaktiválhatod).

Ha kész vagy, irány a fegyverraktár, ahol a frissen importált csomag modelljei közül válaszd ki a legszimpatikusabbat, és húzd közvetlenül a játékoskarakteredet tartalmazó objektum alá úgy, hogy a Hierarchy nézetben egy kis behúzással jelenjen meg alatta a fegyvered. Ha ezzel megvagy, akkor már egy egységet képez láthatatlan játékosod és a fegyvere, így pedig kamerád mozgatásával a fegyver is a megfelelő irányba fordul. Amivel kicsit érdemes lehet még szöszmötölni az a fegyver megfelelő pozíciója, hogy a játéktéren is tökéletesen mutasson a végeredmény.

Lövési koncepciók


Nagyjából két metódus közül választhatsz a lövések leadása során, mindkettőnek megvannak a maga trükkjei, illetve az előnyei és a hátrányai is. Az egyik opció objektumalapú. Ha ezt a megoldást választod, egy tényleges lövedéket kell létrehoznod, majd a gombnyomás hatására a képernyőn megjelenítened és útjára indítanod a golyót.

Ennek megvalósításához érdemes referenciaobjektumként egy gömböt elhelyezni fegyvered végén, kikapcsolni a megjelenítését, és kód segítségével a klónjait létrehozni és megjeleníteni. A másik megoldás egy kicsit elegánsabb, ekkor fizikai lövedékek helyett sugarakkal tüzelsz az előtted található objektumokra - cikkünkben ezt a metódust mutatjuk be részletesen.

Készül a kód


Ahhoz, hogy a lövés vezérlése sikeres legyen, el kell készítened egy rövidke szkriptet. Ehhez a Project fül Create feliratú legördülő menüjéből válaszd a C# Script opciót, majd valamilyen szerkesztőben nyisd meg az egyelőre üres kódot módosításra. A void Start részt a kapcsos zárójelekkel együtt teljesen kitörölheted, jelen kódban nem lesz szükséged erre a függvényrészre. Ha ezzel megvagy, hozz létre az Update metódus előtt három nyilvános változót (hogy a szerkesztőnézetben is könnyedén módosíthass az értékeiken).

Az első szám típusú és egy távolságot jelöl, amelynek segítségével beállíthatod a fegyver maximális hatótávját (public float range=100;), a második egy hivatkozás a jelenetben használt kamerára (public Camera playerCam;), a harmadik pedig maga az effekt, amely a becsapódás helyén jelenik majd meg (public GameObject impactEffect;). Létrehozásukat követően átugorhatsz az Update függvény belsejébe, ahol elsőként egy feltétellel vizsgálnod kell a lövéshez tartozó gomb lenyomását.

A Unity alapértelmezetten az egér bal gombjához társítja a "Fire1" funkciót, így ezt most is bátran használhatod az ellenőrzés során ( if(Input.GetButtonDown("Fire1")){} ). A feltétel teljesülése esetén hozz létre a RaycastHit hit; segítségével egy változót, amelyben a leadott lövésed célpontját jelölöd meg, majd egy feltételben vizsgáld meg a kilőtt sugarad találati értékét a Physics.Raycast( playerCam.transform.position, playerCam.transform.forward, out hit, range) sor segítségével.

Amennyiben sugarad talál olyan objektumot, amely a megadott távolságon belül van, a lövéseffekt leadása lehetséges. Ebben az esetben a GameObject surfaceHit = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal);) segítségével a becsapódást kell megjelenítened az adott pontban. Ha ez megvan, már csak annyi a teendőd, hogy a Destroy(surfaceHit,0.5f); alkalmazásával megszabadulsz a lövési effektustól. Ezzel pedig lényegében el is készült a kódod, így a tesztelés előtt már csak csatolnod kell a szkriptet a karakteredhez, és társítanod a megfelelő komponenseket az Inspector fül alatt elérhető kód mellé.

A Player cam mellé karaktered kameráját helyezd, míg az Impact Effecthez egy Particle Systemre lesz szükséged. Ehhez használd a Standard Assets könyvtár ParticleSystem/Prefabs mappában található FlareMobile-t, amelyen csak minimális módosításokat kell végrehajtanod a megfelelő, robbanásszerű effektus eléréséhez. Ha kész a kívánt hatás, még egy-két célpontot jelképező kockát dobj a jelenetedbe, hogy a leadott lövések maximálisan látványosak legyenek. Ha elkészültél, a Play-gombbal el is indíthatod a játékodat, amelyben képes leszel körbejárni és lövéseket leadni.

Fejlesztési lehetőségek


Elkészült alkotásod remek alapot kínál a továbblépéshez. A környezet módosításával, esetleg egy fegyverváltás lehetőségének megvalósításával már egy teljes mértékben játszható koncepció áll a rendelkezésedre. Érdemes kicsit kutatni az Asset Store-ban, ahol ellenségeket is viszonylag egyszerűen adhatsz hozzá jelenetedhez, amennyiben elérhetőek a megfelelő modellek.

Ha szeretnéd, úgymond életerővel (hp) is felruházhatod az egyes tárgyakat/ellenfeleket, és azok ily módon, a megfelelő mennyiségű találatot követően el is pusztulhatnak.

 

Úgy tűnik, AdBlockert használsz, amivel megakadályozod a reklámok megjelenítését. Amennyiben szeretnéd támogatni a munkánkat, kérjük add hozzá az oldalt a kivételek listájához, vagy támogass minket közvetlenül! További információért kattints!

Engedélyezi, hogy a https://www.helloworldonline.hu értesítéseket küldjön Önnek a kiemelt hírekről? Az értesítések bármikor kikapcsolhatók a böngésző beállításaiban.