Developedia
Developedia
Elmélet

Elmélet

Ismerkedés a Unity motorral és a számítógépes grafikával

Ebben a szekcióban megismerkedünk a Unity fejlesztői környezetével, a számítógépes grafika alapjaival. Egyelőre még nem kezdünk el programozni, csak átnézzük, mi fán terem a játékfejlesztés, mi az a játékmotor és (egyelőre felületesen) megvizsgáljuk, hogyan működik a digitális kettő és három dimenziós képalkotás. Fontos célja ezen fejezeteknek, hogy elkezdjük építeni a szókincsünket a grafika és játékfejlesztés témakörei körül.

Videojáték és a játékmotorVideojáték és a játékmotorFény és az emberi látásFény és az emberi látásA képalkotás alapfogalmaiA képalkotás alapfogalmaiUnity projekt létrehozásaUnity projekt létrehozásaUnity Engine alapjai és logikájaUnity Engine alapjai és logikája2D képalkotás2D képalkotás
3D képalkotás3D képalkotásVirtuális kamerákVirtuális kamerákFények és SkyboxFények és SkyboxA 3D-s tér Unity-benA 3D-s tér Unity-benRenderelési stratégiákRenderelési stratégiákA Render Pipeline-okA Render Pipeline-ok

A C# programozás alapjai

A videojáték egy digitális médium. Elkészítéséhez mindenképp szükséges programozni. Ez történhet sok nyelven sőt akár grafikus programozási eszközökkel is. A Unity motorban a játéklogika írásának nyelve a C# (C Sharp), ezért itt ezen nyelven keresztül fogjuk megismerni a kódolás alapjait. A különböző programozási nyelvek általában nagy átfedésben vannak egymással, szóval az itt felszedett tudás könnyedén újrahasznosítható lesz egyéb keretrendszerekben, nyelveken is. Mindazonáltal mi itt különös figyelmet fogunk fordítani a játékfejlesztés specifikus és azon belül is kimondottan Unity-vel kapcsolatos sajátosságokra.

A programozás elméleti alapjaiA programozás elméleti alapjaiProgramozói eszközeink bemutatásaProgramozói eszközeink bemutatásaHello World: Első programunkHello World: Első programunkSzintaxis és a kommentekSzintaxis és a kommentekVáltozók és típusokVáltozók és típusokA szám típusok: int, floatA szám típusok: int, floatA szöveges típus: stringA szöveges típus: stringAz eldöntendő típus: boolAz eldöntendő típus: bool
ElágazásokElágazásokCiklusokCiklusokVezérlési szerkezetek, Control FlowVezérlési szerkezetek, Control FlowEgyéb matematikai műveletekEgyéb matematikai műveletekMetódusok, függvényekMetódusok, függvényekTömbökTömbökListák és a Foreach ciklusListák és a Foreach ciklusA Git verziókezelőA Git verziókezelő

A játékmotor alatti programozás alapjai Unity-ben

Most nekiállunk, az előző szekcióban felszedett C# programozói tudásunkat kamatoztatni a Unity-ben. Saját kóddal fogjuk ellátni a játék-objektumainkat ezáltal egyedi viselkedést rendelve hozzájuk. Különös figyelmet fogunk fordítani a 2 és 3D-s térre, az ebben történő mozgásra és forgásra. Emellett megismerjük az olyan alapvető játékfejlesztői eszközök alapjait, mint a hangrendszer vagy a felhasználói input.

Hello Unity: Első Unity programunkHello Unity: Első Unity programunkKomponens beállításai és állapotaKomponens beállításai és állapota2D és 3D vektorok2D és 3D vektorokAz idő múlása & Update metódusAz idő múlása & Update metódusBillentyűzet és Gamepad InputBillentyűzet és Gamepad InputPozíció és mozgásPozíció és mozgásA lokális és globális térA lokális és globális térGizmók rajzolása és a Color típusGizmók rajzolása és a Color típusForgatásForgatás
A Towards függvényekA Towards függvényekLineáris és simított interpolációLineáris és simított interpolációObjektumok ki- és bekapcsolásaObjektumok ki- és bekapcsolásaObjektumok létrejötte és megszűnteObjektumok létrejötte és megszűnteUnity Objektumok referenciáiUnity Objektumok referenciáiAz OnValidate metódusAz OnValidate metódusLayer, Tag és Sorting LayerLayer, Tag és Sorting LayerKamera tér és egér inputKamera tér és egér inputHangok a Unity-benHangok a Unity-ben

Haladó C#, manuálisan definiált típusok

Ideje mélyebben beleásnunk magunkat az objektum orientált programozás rejtelmeibe. Most megtanuljuk, hogy hogyan definiálhatunk saját típusokat, és ezen a új típusokat hogy használhatjuk ki hatékonyan, mint Unity játékfejlesztők. Emellett egyéb modern programozói eszközökkel, koncepciókkal és hasznos adatszerkezetekkel is megismerkedünk ebben a szekcióban.

Enum: a felsorolt típusEnum: a felsorolt típusÖsszetett típusok és példányaikÖsszetett típusok és példányaikÖsszetett típusok tagmetódusaiÖsszetett típusok tagmetódusaiTagváltozók és -metódusok láthatóságaTagváltozók és -metódusok láthatóságaA Property, azaz tulajdonságA Property, azaz tulajdonságVáltozók, tagok és a this kulcsszóVáltozók, tagok és a this kulcsszó
Statikus tagok és osztályokStatikus tagok és osztályokReferencia- és értéktípusokReferencia- és értéktípusokKonstans és readonly Konstans és readonly Sorozatok rendezéseSorozatok rendezéseFüggvények több kimenő adattalFüggvények több kimenő adattalEgyéb adatszerkezetekEgyéb adatszerkezetek

A fizikai szimuláció

Majd minden játékban jelen van valami féle fizika, néhol egyszerűbb, van ahol bonyolultabb. Gyakorlatilag ha egy objektumnak van fizikai kiterjedése, alakja, ami befolyásolja a játék futását, akkor már beszélhetünk fizikai szimulációról. Itt nem csak azt fogjuk átnézni, hogy hogyan tudjuk beállítani a Unity motor beépített fizikai rendszerét, hogy az alkalmazkodjon a játékunk speciális igényeihez, de arról is, mi zajlik a háttérben fizikai szimulációkor és miért. Csak ennek teljes megértésével lehetséges hatékonyan és magabiztosan irányítani a játékaink fizikáját.

A mechanika alapjaiA mechanika alapjaiA FixedUpdate és a gyorsuló mozgásA FixedUpdate és a gyorsuló mozgásÜtközés: Collider-ek és Trigger-ekÜtközés: Collider-ek és Trigger-ekUnity fizika és a RigidbodyUnity fizika és a Rigidbody
Rigidbody mozgatásaRigidbody mozgatásaRigidbody forgatásaRigidbody forgatásaJoint-okJoint-okRaycastRaycast

Egyéb fontos játékfejlesztői eszközök

Ezen szekcióban befejezzük a megismerését a legalapvetőbb játékfejlesztői eszközeinknek. Végre megtudjuk, hogy lehet felépíteni egy felhasználói felületet, hogyan kell váltani scene-ek közt és mi a logikája a Unity animációs rendszerének. Nem csak a Unity Editor-on beül fogunk dolgozni. Olyan új programozói technikákat is átveszünk mint például, hogy hogyan kell véletlen számot generálni, editorban szerkeszthető függvényt írni, vagy késleltetve végrehajtani egy metódust. Végül átnézzük hogy lehet futtatható build-et készíteni Unity szoftverünkből.

Scene-ek betöltéseScene-ek betöltésePrefab-okPrefab-okA befoglaló téglatest: BoundsA befoglaló téglatest: BoundsVéletlenekVéletlenekAnimationCurve & GradientAnimationCurve & GradientKésleltetett műveletvégrehajtásKésleltetett műveletvégrehajtásScriptableObjectScriptableObject
Unity UI (Félkész…)Unity UI (Félkész…)UI Elemek (Hamarosan)UI Elemek (Hamarosan)Line és Trail RendererLine és Trail RendererRészecskerendszerek (Hamarosan…)Részecskerendszerek (Hamarosan…)Unity animációUnity animációJátékállapot mentése, SzerializációJátékállapot mentése, SzerializációJáték Build-elése (Hamarosan)Játék Build-elése (Hamarosan)

Még több haladó programozás

A programozás alapjait már megismertük. Változók, vezérlési szerkezetek, metódusok: Ebből már bármit meg lehet építeni, de ez az építkezés, nem lesz feltétlen kényelmes, átlátható és optimális. Most ideje magasabb szintű fogalmakat és technikákat is megtanulni, amikkel jóval hatékonyabban és elegánsabban valósíthatók meg vízióink. Emellett elméleti szinten is mélyíteni fogjuk a progrmozói tudásunk. Jelen szekcióban nem kifejezetten Unity specifikus fejlesztésre fogunk, koncentrálni, inkább általános programtervezésre, ami persze játékok készítésére is ugyanúgy hasznos, mint bármi egyéb szoftverre.

Adatmennyiség: Bitek és bájtokAdatmennyiség: Bitek és bájtokBináris adatok, bitműveletek (Hamarosan)Bináris adatok, bitműveletek (Hamarosan)Kivételkezelés (Hamarosan)Kivételkezelés (Hamarosan)Generikusok (Hamarosan)Generikusok (Hamarosan)Kiegészítő metódusokKiegészítő metódusokEsemény-vezérelt programozás (Hamarosan)Esemény-vezérelt programozás (Hamarosan)
Objektum orientáltság és öröklés (Félkész)Objektum orientáltság és öröklés (Félkész)Absztrakció, Polimorfizmus (Hamarosan)Absztrakció, Polimorfizmus (Hamarosan)Interface-ek (Hamarosan)Interface-ek (Hamarosan)Metódus mint objektum (Hamarosan)Metódus mint objektum (Hamarosan)Processzor, Videokártya, Memória (Hamarosan)Processzor, Videokártya, Memória (Hamarosan)Hasznos Unity attribútumokHasznos Unity attribútumok

Hatékony játéktervezés és -fejlesztés

Most beszéljünk a játékfejlesztés azon aspektusairól, amik valamivel kevésbé konkrétak. Nem fogunk ebben a szekcióban új programozói eszközökkel megismerkedni, hanem arról lesz szó, hogy hogyan tudjuk a már korábban megtanultakat hatékonyabban kihasználni.

A bug-ok megtalálása és elhárításaA bug-ok megtalálása és elhárításaKódduplikáció és KomponensekKódduplikáció és KomponensekMonoBehaviour-ok életciklusaMonoBehaviour-ok életciklusaGameObject-ek azonosításaGameObject-ek azonosításaObjektumok azonosítása string-gelObjektumok azonosítása string-gelSingleton és Service LocatorSingleton és Service Locator
ÖnregisztrációÖnregisztrációKomponensek hierarchiájaKomponensek hierarchiájaTag-elés ScriptableObject-telTag-elés ScriptableObject-telPoolingPoolingProjekt felépítése (Hamarosan)Projekt felépítése (Hamarosan)Kód analízis, Profiler (Hamarosan)Kód analízis, Profiler (Hamarosan)

A játékfejlesztés matematikája

“A játékfejlesztés, és úgy általában a programozás nem tartalmaz túl sok matematikát.” Ezt a mondatot sokszor elmondtam mielőtt elkezdtem volna oktatni mindezt. Azóta egy kicsit óvatosabb vagyok ilyen kijelentésekkel. Nem változott a véleményem arról, hogy nem kell sok matek, viszont az nyilvánvalóvá vált számomra, hogy mennyire mást takar különböző emberek számára a “nem túl sok matek” kifejezés. Most inkább így fogalmaznék: Általában nem kell több matek a programozáshoz, mint az általános és középiskolás anyag egy szűk része. Ha ezen ismeretekkel kapcsolatban is bizonytalanok vagytok, akkor kiemelném, hogy a kellő tudás szép lassan haladva felszedhető a programozói mellé. Ez így hogy hangzik? Most nézzünk pár példát!

A derékszögű háromszögA derékszögű háromszögCélpontkövető kameraCélpontkövető kameraA virtuális kamera látótereA virtuális kamera látótereSimított mozgásSimított mozgás
Egyéb vektorműveletekEgyéb vektorműveletekA Ballisztikus pálya, hajításA Ballisztikus pálya, hajításQuaternion-ok a 3D grafikábanQuaternion-ok a 3D grafikábanTranszformációs mátrixok (Hamarosan)Transzformációs mátrixok (Hamarosan)
⚠️ A további leckék fejelsztés alatt állnak… ⚠️
⚠️ A további leckék fejelsztés alatt állnak… ⚠️

Számítógépes grafika magasabb szinten

Frame Debugger és DrawCall (Hamarosan)Frame Debugger és DrawCall (Hamarosan)Árnyékok mélyebben (Hamarosan)Árnyékok mélyebben (Hamarosan)Fény és tükröződés Probe-ok (Hamarosan)Fény és tükröződés Probe-ok (Hamarosan)Sütött fények (Hamarosan)Sütött fények (Hamarosan)
Volumetrikus fények és köd (Hamarosan)Volumetrikus fények és köd (Hamarosan)Prost Processing (Hamarosan)Prost Processing (Hamarosan)Shader-ek (Hamarosan)Shader-ek (Hamarosan)Decal Projection (Hamarosan)Decal Projection (Hamarosan)

Még több Unity eszköz

Új Unity Input System (Hamarosan)Új Unity Input System (Hamarosan)Érintés Input (Hamarosan)Érintés Input (Hamarosan)Unity Character Controller (Hamarosan)Unity Character Controller (Hamarosan)Görbék, Spline-ok (Hamarosan)Görbék, Spline-ok (Hamarosan)Útvonalkeresés - NavMesh (Hamarosa)Útvonalkeresés - NavMesh (Hamarosa)A Constraint komponensek (Hamarosan)A Constraint komponensek (Hamarosan)3D Humanoid karakter felépítése (Hamarosan)3D Humanoid karakter felépítése (Hamarosan)L.O.D - Level Of Detail (Hamarosan)L.O.D - Level Of Detail (Hamarosan)Több kamerás rendszerek (Hamarosan)Több kamerás rendszerek (Hamarosan)
ProBuilder - Modellezés Unityben (Hamarosan)ProBuilder - Modellezés Unityben (Hamarosan)Terrain Editor (Hamarosan)Terrain Editor (Hamarosan)SpriteShape (Hamarosan)SpriteShape (Hamarosan)Tilemap (Hamarosan)Tilemap (Hamarosan)Cinemachine (Hamarosan)Cinemachine (Hamarosan)Timeline (Hamarosan)Timeline (Hamarosan)Assembly-k (Hamarosan)Assembly-k (Hamarosan)Custom Editor (Hamarosan)Custom Editor (Hamarosan)Property Drawer (Hamarosan)Property Drawer (Hamarosan)
Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn