Mi is egy videojáték?
Mindenki próbáljon meg előállni a maga válaszával erre a kérdésre! Nem egyszerű olyan definíciót találni, ami eléggé általános és nem zárunk ki vele egy-egy játékot. Az én válaszom a következő:
A videojáték olyan számítógépes program, amely használatának célja maga a használattal járó élmény.
Ezt a kérdést azonban boncolgassuk még egy kicsit! Most nézzük meg miből is épül fel, mit tartalmaz kötelezően egy videojáték.
Minden videojáték tartalmaz:
- Egy belső reprezentációt egy virtuális világról saját szabályokkal és beállításokkal.
- Egy aktuális állapotot erről a világról.
- Audiovizuális visszacsatolásokat a játékos felé a játékvilágról és annak aktuális állapotáról.
- Lehetőségeket a játékos számára, hogy interakcióba lépjen ezen játékvilággal és ezzel változtassa az aktuális állapotát.
Hogy mit is jelentenek a fenti feltételek, egy olyan példán keresztül nézzük végig, amit mindenki ismer. Esetünkben legyen ez a Super Mario Bros 1985-ből.
- Ebben az esetben a virtuális világ a játék pályáit jelenti, a benne lévő szörnyekkel, játékos karakterekkel és egyéb játékelemekkel (pl.: ágyú, zászló, lépcső) együtt. Emellett a játék szabályait és minden beállításait. Milyen sebességgel halad a gomba? Mit csinál egy teknős, ha egy szakadékhoz ér (zöld leesik, piros visszafordul). Mennyi ideje van a játékosnak befejezni egy pályát? Hány pontot ér egy érme? Hány élettel kezd Mario?
- Az állapot magában foglal olyan információkat, mint hogy melyik pálya mely pontján áll Mario, mennyi élete és pontszáma van, valamint az a gomba a képernyő közepén melyik irányba halad éppen. Ezen kérdésekre a válaszok folyamatosan változnak, az előző pontban feltettekkel ellentétben.
- Visszacsatolást kapunk a világról és állapotáról azáltal, hogy látunk egy képernyőt és annak hozzávetőleges közepén egy pixeles vízvezetékszerelőt. Látjuk a közvetlen környezetét, a platformokat, ellenfeleket és megszerezhető jutalmakat. Ezenkívül még a hangok is informálnak minket. Különböző hangeffektet hallunk, hogyha mi sebeztük meg a gombát és akkor ha az sebzett minket. Ezen információk elegek ahhoz, hogy a játékos folyamatosan játszani tudjon.
- A játékos kezében van egy kontroller, amivel rá tudja bírni a főszereplő karakterünket, hogy jobbra és balra fusson, ugorjon, lehajoljon, és ha épp megvan a képessége hozzá lőjön egy tűzgolyót. Így interaktál a játékos a játékkal.
Grafikus játékok
Próbáljuk meg egy kicsit szűkíteni a definíciónkat csak a grafikus játék-okra. Ezzel nem sok játékot zártunk ki (99.9%-a játékoknak valami módon grafikus), mégis sokat pontosítunk a fejlesztés körüli feladatok problémakörén.
Egy grafikus játékra elmondhatjuk, hogy a játékunk világa és annak állapota nagyrészt egy 2D-s vagy 3D-s térben elhelyezkedő objektumokból áll, és a vizuális visszacsatolás java része nem más, minthogy erről a 2 vagy 3 dimenziós térről készítünk valami módon egy felvételt és azt megjelenítjük a játékos számára a képernyőn.
És ezzel a pontosítással sok-sok általános programozási feladat és kérdés hullott az ölünkbe.
Olyan kérdések, mint:
- Hogy reprezentálunk objektumokat 2D vagy 3D térben? (Pozíció, orientáció)
- Ezen objektumokat hogyan állítsuk be?
- Hogyan módosítjuk az objektumok állapotát futás közben a felhasználó interakciói alapján?
- Hogy rendelünk vizuális kinézetet ezen objektumokhoz?
- Azután hogyan jelenítjük meg a 2D vagy 3D világunkat a játékos számára?
- stb…
Számtalan ezekhez hasonló kérdés létezik, ami érinti a videojátékok 99+ százalékát. Ha minden segédeszköz nélkül állnánk neki játékot fejleszteni, ezekre a kérdésekre mindre nekünk kéne saját megoldást kitalálni és elkészíteni.
Ez egy kivételesen érdekes, ám egyszerre igen nagy feladat lenne, amit nem javasolnék kezdőknek. Egyszerűbben eljutunk a célunkhoz, ha megnézzük milyen megoldásokat adtak már erre előttünk tapasztaltabb fejlesztők. Erre szolgálnak a játékmotorok.
A játékmotor olyan fejlesztői keretrendszer és programozói könyvtár egyben, ami kifejezetten videojátékok és egyéb dinamikus 2 és 3D-s szoftverek elkészítéséhez szükséges megoldásokat foglal magába.
- A fejlesztői keretrendszer egy szoftveres környezet, ami hátteret biztosít új szoftverek fejlesztéséhez.
- A programozói könyvtár (vagy kicsikét félrevezető elnevezéssel függvénykönyvtár) egy adag előre megírt programkód, olyan programozói elemekkel, amiket a fejlesztő fel tud használni saját programjai elkészítéséhez.
Milyen problémákat old meg egy modern Játékmotor? (Mint például a Unity)
- Renderelés (Képszintézis)
A modern rendererek, mint például a Unity-é is sok beállítási lehetőséget kínálnak egyedi vizuális stílus megalkotásához és az optimalizáláshoz.
Azt a folyamatot, amikor egy számítógépes modellről vagy jelenetről egy virtuális kamera pixelgrafikus vagy más néven rasztergrafikus képet készít, renderelésnek vagy képszintézisnek nevezzük.
Ha a képeket folytonosan meg is jelenítjük gyors egymásutánban, akár egy filmet, valós idejű vagy “real-time” renderelésről beszélünk.
- Projektépítés vizuális szerkesztőben
- Fizikai szimuláció
- 2D és 3D matematikai műveletek
- Audio kezelése
- Build készítés különböző platformokra
- Input Kezelés
- Felhasználói felületek (UI - User Interface) kezelés
- Animációs rendszer
- Részecskerendszerek (vizuális effektek)
- Multiplayer támogatás
- AI. útvonalkeresés
- Erőforrásmanagement és optimalizálást segítő eszközök
- És még sok más…
Vizuális feladatokon vizuális fejlesztőeszközzel lehet hatékonyan dolgozni. A Unity editora nagy segítséget jelent abban, hogy a fejlesztő kényelmesen népesíthesse be a 2D-s és 3D-s játékvilágot objektumokkal és ruházhassa fel azokat a megfelelő tulajdonságokkal.
Egy olyan fizikai motor építése, ami kezeli akár sokszáz különböző alakú objektum egymással való interakcióját, távolról sem triviális feladat. Valamiféle egyszerűbb vagy bonyolultabb fizikai szimulációra szinte minden játékban szükség van. A Unity több opciót is kínál.
A koordinátageometriai, lineáris algebrai és egyéb matematikai könyvtárak nagyban könnyítik a fejlesztést.
Hangok, és zenék lejátszása és keverése