Scene ablak
A Scene ablak jeleníti meg a játékvilágot Itt van lehetőségünk vizuálisan elrendezni az objektumainkat.
A térben a következő módon tudunk legkönnyebben navigálni:
- Forgás - Jobb egérgombot lenyomva
- Mozgás - Középső (görgő) egérgombot lenyomva
- Előre és hátra haladás (Zoomolás) - Egér görgő görgetése
- Ha az F billentyűt lenyomjuk, mikor egy GameObject ki van jelölve, vagy duplán rákattintunk a Hierarchy ablakban akkor az adott objektum kerül fókuszba.
Az ablak bal felső sarkában található függőleges eszköztárral tudjuk a Transformokat szerkeszteni. Erre mindig a bal egérgombot fogjuk használni.
Felülről lefelé haladva a következőket tartalmazza:
- Kéz: Ha ez az eszköz van kiválasztva, akkor a bal egérgomb is azt teszi, mint a középső
- Mozgató: Ezzel tudjuk az elemeket mozgatni a 2D/3D térben
- Forgató: Ezzel tudjuk az elemeket forgatnia 2D/3D térben
- Méretező : Ezzel tudjuk az elemeket forgatnia 2D/3D térben
- RectTransform méretező : Speciális eszköz főleg a UI felületeknél használatos
- Összetett szerkesztő: Mozgató, Forgató és Méretező egyben
Gizmók
Azokat az elemeit a Scene ablaknak, amik csak a fejlesztés közben láthatók Gizmóknak nevezzük. Példák lehet a colliderek zöld korvonalai vagy a mozgató eszköz nyilai. A gizmók majd mindegyikét a Scene és a Game ablakban is tetszőlegesen ki és be lehet kapcsolni.
Általános iskolából mindenki jól emlékezhet a koordináta rendszerekre. Az akkor tanultak nagy hasznunkra vannak, mikor a számítógépeken akarunk geometriai számításokat végezni.
A térbeli programozásban geometriával dolgozunk ám olyan fogalmak, mint a pont, vonal, merőleges, rombusz vagy szinusz teljességgel értelmezhetetlenek a számítógép hardvere számára. Ha munkára akarjuk bírni a processzort és a videokártyát, hogy 2D és 3D-térben értelmezett műveleteket hajtson végre, minden magasabb szintű matematikai fogalmat le kell képezni számokra és azokon végzett elemi műveletekre. A koordinátageometria pont ezt teszi.
(A későbbiekben képesek leszünk saját gizmók létrehozására: Gizmók rajzolása és a Color típus)
A Descartes koordináta rendszer
Egy 2 dimenzós síkot lefedhetünk egy négyzetráccsal. Ebben az esetben kiválasztunk:
Egy középpontot, amit origónak nevezünk.
Egy X tengelyt, ami átmegy az origón és van egy meghatározott pozitív iránya.
Egy Y tengelyt, ami az origóban keresztezi az X tengelyt merőlegesen és van egy meghatározott pozitív iránya.
Ekkor a sík minden pontja egy az egyben egyértelműen megfeleltethető lesz egy számpárnak.
Ezért 2 dimenziós a sík, mert kettő független szám tud egyértelműen leírni egy pontot benne. Ezt jelenti a dimenzió fogalma. Ha a 3 dimenziós térre gondolunk, ott már csak 3 független számmal tudjuk ezt megtenni.
A 2 dimenziós (ezentúl csak 2D) sík egy pontját leíró számpár első eleme az X tengely mentén történő eltolást, a második eleme az Y tengely mentén történő eltolást jelenti. Lást az ábrán:
Ez kiterjeszthető a 3D térre is, ha egy extra Z tengelyt adunk a síkunkra, ami szintén az origóban metszi az X és a Y tengelyt is merőlegesen. Ebben az esetben a számpárunk számhármassá bővül és a harmadik eleme a Z tengely menti eltolást adja meg.
Egy ilyen számhármassal leírható a 3D-s tér minden pontja és a tér minden pontja pontosan egy számhármasnak felel meg.
Ezeket a számpárokat és számhármasokat más néven 2D és 3D vektoroknak nevezzük.
A vektorok elengedhetetlen kellékei a Unity eszköztárunknak: 2D és 3D vektorok
Unity 3D
A 3D-s teret egy koordinátarendszerrel írjuk le, aminek van három egymásra merőleges tengelye: X, Y és Z.
Ezen tengelyek kereszteződését hívjunk origónak (origin). Az origó koordinátája: (0,0,0)
Alapvetően 2 módja van a 3D-s grafikába annak, hogy megválasszuk a tengelyek egymáshoz képesti helyzetét. Ennek logikája a következőképp történik: A három tengelyt megfeleltetjük 3 ujjunknak egy kézen: X Hüvelykujj, Y: Mutatóujj, Z: Középsőujj. Ha ezen három ujjunkat elforgatjuk egymáshoz képest 90 fokra akkor egy-egy kezünk egy koordinátarendszert szimbolizál. Attól függően, hogy jobb vagy bal kezet használunk lehet a koordinátarendszerünk jobb kezes és bal kezes. Ezen két rendszer nem forgatható egymásba ahogy azt sem tudjuk elérni, hogy a két kezük megfelelő 3-3 (egymással 90 fokot bezáró) ujja egy irányba mutasson.
3D-s szoftverenként eltérhet, hogy balkezes vagy jobbkezes a koordinátarendszer.
Másik önkényes választás, amit egy 3D-s koordinátarendszer definiálásánál meg kell hozni, hogy mely tengely reprezentálja melyik irányt.
A Unity logikája szerint (és ez is 3D-s szoftverenként változhat) a következőképp oszlik fel 3 tengely:
🍎 1. - X koordináta - Vízszintes tengely - Piros szín - Jobbra pozitív, Balra negatív 😡
🪲 2. - Y koordináta - Függőleges tengely - Zöld szín - Fel pozitív, Lefelé negatív 🤢
💎 3. - Z koordináta - Mélységi tengely - Kék szín - Előre pozitív, Hátra negatív 🥶
Ez a felosztás is csak egy döntés, egy konvenció. A tér minden iránya a valóságban egyenrangú és a Unity készítői máshogy is feloszthatták volna a tengelyeket.
Semmi akadálya annak, hogy valaki ne tisztelje ezutóbbi konvenciót, de ez erősen NEM javasolt.
Hosszú távon saját magunk és kollégáink munkáját nehezíti meg főleg a kódolás során, ha eltérünk a Unity által javasolt felosztástól.
Mértékek
A koordinátarendszer négyzetrácsai közti térnek nincs mértékegysége. Játéktól függő, hogy hogyan tekintünk rá, ám ha nincs jó okunk ettől eltérni javasolt egy méterként kezelni egy egységet és eszerint méretezni az elemeinket.
Jó ok lehet az eltérésre, ha a játékunk nagyon apró vagy nagyon nagy dolgok közt játszódik, pl: csillagrendszerek vagy hangyák világa. Más példa lehet, ha a játékmenethez jobban illene más mérték. Például egy négyzetrács alapú játék, mint akár a sakk készítésekor célravezetőbb annak a mértékét használni.
Egyébként néhány helyen, főleg a fizikai motorban látszik, hogy a Unity is méterként kezel egy egységet. Pl.: az alapbeállított gyorsulás mértéke 9.81 , míg a földi gravitációs gyorsulás mértéke ugyancsak 9.71 .
Iránytű
A Scene ablak jobb felső sarkában egy különös eszköz jelenik meg. Erre a gizmóra tekinthetünk úgy, mint egy iránytűre, ami nem csak a 4 égtájat, de a felfelé és lefelé irányt is mutatja.
Az iránytű színes szára mindig az adott tengely pozitív irányába mutat: Jobbra, Fel, Előre.
Bármelyik tengelyre kattintunk az iránytűn, a Scene ablak fejlesztői virtuális kamerája a kiválasztott irányba orientálja magát.
A középső kockára kattintva válthatunk perspektív és ortografikus nézet közt.
A különböző kameranézeteket mélyebben itt tárgyaljuk: Virtuális kamerák
Unity 2D
A Scene ablakot lehet 2D módba állítani (2D gomb a Scene ablak felső menüjében), de ne feledjük, hogy ez csak egy megjelenítés. A háttérben ugyanúgy 3 dimenziós a világ.
2D-s módban nem tudjuk a teret forgatni így az Iránytűre sincs szükség. Nem is jelenik meg.
Unity 2Ds módjában a tengelyek logikája a 3D-hez hasonlít, a Z koordináta elhagyásával:
🍎 1. - X koordináta - Vízszintes tengely - Piros szín - Jobbra pozitív, Balra negatív 😡
🪲 2. - Y koordináta - Függőleges tengely - Zöld szín - Fel pozitív, Lefelé negatív 🤢
A 2D módban mivel nincs mélységi dimenzió, a fejlesztői kamera mindig ortografikus nézetben jelenik meg.
Szülő-gyerek kapcsolat GameObject-ek közt
A 3D-s szoftverek fontos fogalma az objektumok hierarchiája, azaz szülő és gyerek kapcsolata.
Ha egy (A) objektumot a Hierarchy ablakban egy másikra (B-re) húzol, akkor a A objektum B gyereke le és B pedig A szülője.
Minden objektumnak legfeljebb egy szülője és bárhány gyereke lehet és ez ismételhető bármilyen mélységben. Azokat az objektumokat, aminek nincs szülőjük gyökér objektumoknak hívjuk.
Így egy faszerkezet épül fel a GameObject-ekből (akár egy mappaszerkezet).
A gyerek objektum örökli a szülője Transfom-jának tulajdonságait. Ez azt jelenti, hogyha mozgatjuk, forgatjuk vagy méretezzük a szülőt, akkor a gyerek is mozogni, forogni és méreteződni fog a szülővel együtt.
Talán úgy a legkönnyebb megérteni mindezt, hogy építünk egy pálcikaembert Utnity-ben az objektumokból. A karakterünk teste a gyökér abból nőnek ki a végtagok és a fej, tehát ezek a gyerekei lesznek. A kézből nő ki az alkar, abból a tenyér és abból az ujjak, szóval az újak lesznek a legutolsó gyerekek, amik senkinek nem a szülei. Ha az egész embert mozgatni vagy forgatni szeretnénk a test objektumot mozgatjuk. Ekkor azt szeretnénk, hogy minden tagja vele együtt mozogjon. Ugyanez igaz arra, ha csak egy karját akarjuk mozgatni mondjuk egy integetés animálására. Ekkor nem akarjuk, hogy a test vele mozogjon, da az alkar, tenyér és ujjak igen.
Globális és Lokális tér
Ahogy azt már tárgyaltuk a Unity Scene-nek van egy origója és három speciális iránya, az X, Y és Z tengelyek. Mindez minden objektumra egyformán igaz. Ezt nevezzük globális térnek vagy világkoordinátarendszernek.
Azoknak az objektumoknak, amiknek van szülője van még egy kiemelt koordinátarendszere, ami a szülőhöz képest értelmezett, ezt nevezzük lokális térnek.
Ha egy szülő mozog, forog vagy méreteződik, a gyereke globális koordinátája vele változik, de a lokális koordinátája nem, mert a pozíciója, orientációja és mérete a szülőhöz képest nem változott.
Egy objektum lokális terének tengelyei sem feltétlenül egyeznek a globáliséval. Ez akkor van így, ha a szülő el van forgatva egy vagy több tengely mentén.
A transform komponens inspector ablaka lokális adatokat jelenít meg.
A Scene ablak jobb felső sarkában lehet váltani, hogy a szerkesztőeszközök lokális vagy globális térben értelmezettek.
Bővebben: A lokális és globális tér