Unity-suli: focizz a saját platformodon!

|

Szeretnéd elkészíteni a FIFA konkurensét? Megmutatjuk, hogyan vágj bele egy labdarúgójáték fejlesztésébe.

Minden év szeptemberében menetrendszerűen a boltok polcaira kerül az EA népszerű sportjátéka, a FIFA, amely ugyan minimális változtatásokat kínál a korábbi verziókhoz képest (némelyik platformon látszólag csupán a csapatok összetételét aktualizálják), mégis felhasználók tömege rendeli elő, hogy már a megjelenése napján rúghassa barátaival a virtuális bőrt. Cikkünkből megismered a sportjátékok elkészítésének nem is annyira bonyolult alapjait, ezért akár egyedül is megpróbálkozhatsz a feladattal.

Épül a pálya


Szükségtelen extra asseteket importálnod ahhoz, hogy nekiláthass a fejlesztésnek, pusztán annyi a teendőd, hogy elindítasz egy új 3D-s projektet, és a megnyíló szerkesztői nézetben a bal oldali Hierarchy fülhöz tartozó legördülő menüre kattintasz. Itt aztán a 3D Objects/Cube opcióval létrehozhatsz egy, a szerkesztőfelületen azonnal megjelenő kockát. Kattints rá, és a jobb oldali Inspector felületen manuálisan állítsd át a méretezését a Scale-értékeket megváltoztatva. Az x-et érdemes 50-re húzni, a z-t elég 30-ra, hogy a pálya elérje a megfelelő méretet.

Ezután készíts egy Materialt, a színét pedig állítsd zöldre az Inspector nézetben. Most már elmondhatod magadról, hogy megcsináltad az első pályádat. Amennyiben szeretnéd, falakkal körbeépítheted a területet, illetve a két kaput is létrehozhatod egy-egy kocka megfelelő méretezésével. Amikor utóbbiakkal foglalkozol, javasolt a BoxCollidernél kipipálnod az Is Trigger melletti jelölőnégyzetet, és hozz létre egy scriptet is, amely a private void OnTriggerEnter(Collider other){ if(other.transform.name == "Ball"){Debug.Log("GOOOOL"); } } kódot arra használja, hogy figyelje a labda érkezését.

Jöhet a focistád


Egyszerűségre kell törekedni a prototípus elkészítése során; felesleges azonnal animált modelleket helyezned a képernyőre, ráérsz majd a későbbiekben ezekre cserélni a játékosokat. Ehelyett a Hierarchy legördülő menüjéből válaszd ki a 3D Objects/Capsule opciót, a kapszulaalakból ugyanis tökéletes focistát faraghatsz némi kódolással. Igazítsd méretre a munkaablakban megjelenő játékosodat, majd az Inspector fül alatt válaszd az Add Component gombot.

A megjelenő menüsor keresőmezőjébe gépeld be a Rigidbody kifejezést, az így talált elemet pedig csatold a játékosodhoz egy kattintással. Amint ez a kiemelt fontosságú elem felkerült focistádra, már csak a mozgatásért felelős szkriptet kell megalkotnod. Ehhez hozz létre a munkaterület alatt található Project-felületen a Create-gombbal egy C# Script állományt, utóbbinak add a playerControl nevet, és valamilyen szerkesztőben nyisd is meg a frissen elkészített kódot.

Bármilyen hihetetlen, a karakter vezérléséhez mindössze két sornyi kóddal kell kiegészítened ezt a fájlt, az első a public float moveSpeed = 5;, ezzel az editorban is szabályozható formában hozod létre játékosod mozgási sebességét, a másik pedig az Update magjába kerülő transform.Translate(moveSpeed*Input.GetAxis("Horizontal")*Time.deltaTime,0f,moveSpeed*Input. GetAxis("Vertical")*Time.deltaTime); sor, ahol az x és a z tengelyeken végzett mozgást kontrollálhatod a nyilakkal vagy a WASD-billentyűkkel. Ha ezekkel elkészültél, elmentheted a kódot, amit a Unity szerkesztőfelületén húzz a játékosodra.

Dobd be a labdát!


Most, hogy az első labdarúgód sikeresen birtokba vette a pályát, jöhet a labda elkészítése. Ehhez nem kell mást tenned, mint a Hierarchy legördülő menüjéből a 3D Object/Sphere opciót választanod, és megfelelő méretűvé alakítanod a játékszert, amelynek színe egyelőre maradhat az alapértelmezett fehér. Még a labdához is társítanod kell fizikát egy Rigidbody-val, csak ismételd meg a játékos létrehozásához szükséges lépéseket. Ennyi azonban távolról sem elég, még fizikai anyagot is csatolnod kell hozzá.

Ehhez hozz létre a Project-felület Create-gombjával egy Physic Materialt, majd a tulajdonságai között állítsd át a Bounciness értékét 0.6-ra. Ezt aztán csatold a labdád Sphere Colliderén található Material menüponthoz, és az indítást követően láthatod is, amint a pályára esve pattog egy kicsit. Ezzel az összeállítással már terelgethető a labda, ha azonban szeretnéd, hogy karaktered tényleges rúgásokra is képes legyen, akkor nem úszod meg a kódolást. Kreálj a Project-felületen egy új C# Script fájlt ballKick néven, és egy szerkesztővel nyisd meg ezt az állományt. A Start és az Update részeket nyugodtan töröld, ezek feleslegesek.

A helyükön hozz létre egy változót float kickForce = 10; formában, ezzel határozod majd meg a labdát érő erőhatást, amikor a játékossal találkozik (igény szerint akár randomizálhatod is ezt az értéket). Ezek után a private void OnCollisionEnter(Collision other){} függvénnyel vizsgáld meg a labdát érő ütközést, majd egy if (other.transform.name == "Player"){} feltételben szűkítsd a játékostól érkező ütközésekre az erőhatást. Ha ezzel végeztél, a Vector3 direction = (other.transform.position - transform.position).normalized; sorral határozd meg a hatás irányát, végül pedig a GetComponent<Rigidbody>().AddForce(-direction * kickForce, ForceMode.Impulse); sorral élesítsd is a lökéshullámot. Miután elkészült a kódod, húzd a labdára, és már tesztelheted is a játékos rúgóképességét.

Pályán az ellenfelek


Persze a labdarúgás önmagában semmit sem ér, ha csupán magányosan terelgeted a bogyót, nem árt tehát néhány ellenfél a hangulat és a játékélmény fokozásához. Ezt sem érdemes túlbonyolítani, használd a játékosnál is jól bevált kapszulát a konkurens csapat elkészítéséhez. Ismételten elkerülhetetlen a Rigidbody alkalmazása, illetve még egy Nav Mesh Agent nevű komponenst is ki kell választanod az Add Component megnyitásával eléd táruló listából.

Ezzel a tulajdonsággal tudod a kódon keresztül automatizálni az ellenfelek mozgását, az élesítéséhez viszont még ki kell választanod a felső menüsorban található Window menüpont AI opciójából a Navigationt, amely az Inspector fül mellett nyílik meg. Ezt követően a Hierarchy listában jelöld ki a pályádat, a Navigation menüpontban pedig klikkelj az Objects fülre, pipáld ki a Navigation Static melletti jelölőnégyzetet, és végül a Navigation Area legördülő menüjéből válaszd a Walkable opciót. Amint ezekkel elkészültél, a Navigation ablakban maradva kattints át a Bake-re, és válaszd az ugyanilyen elnevezésű opciót.

Ha mindent megfelelően hajtottál végre, akkor kék színű fedésre figyelhetsz fel a pályán, ez jelzi azt a területet, amit MI-vezérelt karaktered képes bejárni. Most pedig jöhet az ellenfél kontroll-funkcióinak élesítése kódon keresztül. Készíts egy BallFollow nevű C# Script fájlt, majd nyisd meg egy szerkesztőben. A kód elejére biggyeszd oda a using UnityEngine.AI; opciót is a többi mellé, az osztályon belül pedig hozz létre három változót (public GameObject target; public NavMeshAgent nma; public float minDist=2;), miközben a Start belsejében értéket adsz a navigációért felelős komponensnek (nma=this.GetComponent<NavMeshAgent>(); ).

Az Update függvényben a float distance = Vector3.Distance(transform.position, target.transform.position); segítségével számold ki és tárold el a labda, valamint az ellenfél közötti távolságot, ha pedig az érték kisebb a minDistben megadott minimális távolságnál, akkor az ellenfél kezdje követni a labdát (if(distance<minDist){ nma.SetDestination(target.transform.position); }). Ezzel nagyjából el is készültél az alapokkal, kezdődhet a kergetőzés.

Így fejleszd tovább!


Mindezek után rengeteg irányba elindulhatsz projekttel, akár programozói, akár dizájneri szemmel nézzük. A legegyszerűbb megoldás, ha a textúrázással foglalkozol egy keveset - mind a pálya, mind a karakterek pillanatok alatt módosíthatók igényeid szerint. Ezenfelül villámgyorsan felhúzhatsz egy stadiont is (viszonylag egyszerűen találsz a célnak megfelelő modelleket az interneten), miáltal alkotásod professzionálisabb hatást kelt.

Természetesen a szkripteket is okosíthatod némileg (például úgy, ha az ellenfeleknek egyéni rangokat hozol létre), illetve a saját játékosok és az ellenfelek száma is növelhető. Arra viszont nem árt figyelni, hogy váltani lehessen a csapat tagjai között.

Ú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.