3D-s technológiák a játékfejlesztésben UDK bevezetés
Első lépések Könyvtár szerkezet: UDK-XXXXXXXX Binaries Development: Itt található a játék forráskódja, ezt kibővíthetjük. FONTOS: A már meglévő kódokat ne módosítsuk! Engine UDKGame
UDKGame könyvtár Autosaves: A telepítés után még nem létezik. A szerkesztő időnként ide menti el a szerkesztés alatt lévő pályát, hogy a szerkesztő hibája esetén innen vissza lehessen tölteni azt. Config: Különböző konfigurációs fájlokat tartalmaz. Content: Pályák, hangok, karakterek. Logs: Események naplói, illetve debug logok.
UDKGame könyvtár Movies: Átvezető videók, pálya betöltés közbeni videók. Script: A script fájlok lefordított verziói ide kerülnek, a játék terjesztésekor ezekre is szükség van. Splash: A szerkesztő által használt splash képek. Localization: Több nyelvű program esetén ide helyezzük el a lefordított szövegeket.
Saját kód Különítsük el a saját kódunkat az EPIC által írt kódtól A Development\Src könyvtárban hozzuk létre a saját könyvtárunkat, például: AwesomeGame, majd ebbe a Classes könyvtárat A fordító majd az UDKGame\Script könyvtárba helyezi az AwesomeGame.u lefordított fájlt
Saját kód Hozzuk létre az AwesomeGame.uc forrásfájlt a Classes könyvtárban: Class AwesomeActor extends Actor placable; defaultproperties { Begin Object Class = SpriteComponent Name = Sprite Sprite = Texture2D'EditorResources.S_NavP' End Object Components.Add(Sprite)
Saját kód Az osztály neve AwesomeActor, egyeznie kell a fájl nevével! Class AwesomeActor extends Actor placeable; defaultproperties { Begin Object Class = SpriteComponent Name = Sprite Sprite = Texture2D'EditorResources.S_NavP' End Object Components.Add(Sprite)
Saját kód Az osztály az Actor osztályból származik, így örökli annak tulajdonságait. Class AwesomeActor extends Actor placeable; defaultproperties { Begin Object Class = SpriteComponent Name = Sprite Sprite = Texture2D'EditorResources.S_NavP' End Object Components.Add(Sprite)
Saját kód Az osztályból készített példányt elhelyezhetjük a szerkesztőben. Class AwesomeActor extends Actor placeable; defaultproperties { Begin Object Class = SpriteComponent Name = Sprite Sprite = Texture2D'EditorResources.S_NavP' End Object Components.Add(Sprite)
Saját kód Az osztályból készített példányt egy spriteként látjuk a szerkesztőben és a játékban. Class AwesomeActor extends Actor placeable; defaultproperties { Begin Object Class = SpriteComponent Name = Sprite Sprite = Texture2D'EditorResources.S_NavP' End Object Components.Add(Sprite)
Saját kód Tudassuk a rendszerrel, hogy létezik a saját AwesomeGame könyvtárunk Nyissuk meg az UDKGame\Congig\DefaultEngine.ini-t, és az AwesomeGame-t adjuk az EditPackages listához: [UnrealEd.EditorEngine] +EditPackages=UTGame +EditPackages=UTGameContent +EditPackages=AwesomeGame
Az osztály használata Fordítsuk le a megírt scriptet: Lépjünk ki a szerkesztőből Indítsuk újra a szerkesztőt, vagy az UnrealFrontend segítségével indítsuk el a fordítást A Content Browser-ben keressük meg az AwesomeActor-t, majd húzzuk a pályára
Hello world Rejtsük el az AwesomeActor-t játék közben: Begin Object Class=SpriteComponent Name=Sprite Sprite = Texture2D'EditorResources.S_NavP' HiddenGame = True End Object A játék indulásakor írjunk a log-ba egy üzenetet: Class AwesomeActor extends Actor placeable; function PostBeginPlay() { `log("hello world!");
Változók Változó deklaráció: var <típus> <név>; Szerkeszthető változó: var() <típus> <név>; Változó kiíratása logba: var int a; `log("a valtozo = " @a);
Változók bool: logikai érték, true vagy false lehet byte: 1 bájtos egész, 0-tól 255-ig terjedhet int: 32 bites egész float: 32 bites lebegőpontos érték string enum struct
Változók, példa Class AwesomeActor extends Actor placeable; enum Felsorolas { HAPCI, VIDOR, KUKA ; var() Felsorolas torpok; var() bool a; var() byte b; var() int c; var() float d; var() string e; var(valami) bool f; var int g; [ ]
Tömbök Class AwesomeActor extends Actor placeable; enum Felsorolas { ; HAPCI, VIDOR, KUKA var() int tomb1[5]; var() Felsorolas tomb2[5];
Dinamikus tömbök Megadjuk, hogy milyen típusú elemekből áll a tömb: var() array<int> dinamikus; Ez kezdetben 0 méretű, de ha az i. elemnek adunk értéket, akkor i+1 méretűre nő a tömb: dinamikus[2] = 10; // 3 elemű lesz Elemszám lekérdezése: dinamikus.length
Struktúrák struct Valami { var() int a; var() bool b; ; struct Masik { var() Valami c; var() int d; ;
Vector var vector offset; function PostBeginPlay() { offset.z = 64; SetLocation(Location + offset); // vagy: SetLocation(Location + vect(0, 0, 64)); A szereplő kezdő pozícióját eltoltuk a Z tengely mentén 64 egységgel. A vector adattagjai: x, y és z. A vektor hossza: VSize(offset)
Rotator var rotator rotate; function PostBeginPlay() { rotate = rot(0, 0, 4000); SetRotation(Rotation + rotate); Rotator adattagjai: pitch, yaw, roll Az adattagok 0-tól 65536-ig terjednek (65536 = 360 fok)
Alapértelmezett értékek Az osztályváltozók kezdeti értékeit a defaultproperties-ben adjuk meg: defaultproperties { a = true [ ]
Lokális változók Függvényen belül a var helyett a local kulcsszóval vezetjük be a lokális változókat. A lokális változókat a függvény elején kell megadni! function PostBeginPlay() { local int aa = 42; `log("aa = "@aa);
Vezérlési szerkezetek: if if (c == 0) { `log("nulla"); else if (c == 1) { `log("egy"); else { `log("egyik sem");
Vezérlési szerkezetek: switch switch (c) { case 0: case 1: `log("nulla"); break; `log("egy"); break; case 2: `log("ketto"); break; default: `log("egyik sem");
Vezérlési szerkezetek: ciklus for (aa = 0; aa < 5; aa++) { `log("aa = "@aa); aa = 0; Bennmaradási feltétel! while (aa < 100) { `log("aa = "@aa); aa += aa + 1; aa = 0; do { `log("aa = "@aa); aa += aa + 1; until (aa >= 100); Kilépési feltétel!
Saját fegyver Class AwesomeGun extends UTWeap_Rocketlauncher_Content; defaultproperties { FireInterval(0) = 0.1 ShotCost(0) = 0