3D-s technológiák a játékfejlesztésben Saját játék osztály
GameInfo class Összefoglalja a játék szabályait, pontokat, valamint, hogy milyen szereplők vehetnek részt a játékban Nagyrészt csak interfészt biztosít, amelyek megvalósítását a gyerek osztályokra (UTGame, UTDeathmach, stb.) bízzuk Itt határozhatjuk meg, hogy milyen játékos vezérlő osztály vezérelje a játékost A rendszer a pálya betöltésekor példányosítja
Saját játék osztály class AwesomeGame extends UTDeathMatch; defaultproperties PlayerControllerClass= Csak az olvashatóság miatt tördeltem, valójában ide tilos sortörést tenni! class'awesomegame.awesomeplayercontroller' Az AwesomeGame könyvtárban hozzuk létre az AwesomePlayerController osztályt!
Saját játékos osztály class AwesomePlayerController extends UTPlayerController; var vector PlayerViewOffset; defaultproperties PlayerViewOffset=(X=-64, Y=0, Z=700) simulated event GetPlayerViewPoint(out vector out_location, out Rotator out_rotation) super.getplayerviewpoint(out_location, out_rotation); if (Pawn!= none) A kamerát ennyivel toljuk el a játékos karakteréhez képest out_location = Pawn.Location + PlayerViewOffset; out_rotation = rotator(pawn.location - out_location);
Saját játékos osztály Nem látható a karakter Látható a célkereszt, ami most zavaró Túl nagy a fegyver Alap esetben a fegyver mindig arra lő, amerre a kamera néz
Saját játékos osztály function Rotator GetAdjustedAimFor(Weapon W, vector StartFireLoc) return Pawn.Rotation; Arra lőjünk, amerre a karakter néz simulated event GetPlayerViewPoint(out vector out_location, out Rotator out_rotation) super.getplayerviewpoint(out_location, out_rotation); if (Pawn!= none) Pawn.Mesh.SetOwnerNoSee(false); Legyen látható a karakter out_location = Pawn.Location + PlayerViewOffset; out_rotation = rotator(pawn.location - out_location);
Saját játékos osztály Látható a célkereszt, ami még zavaró Túl nagy a fegyver
Saját játékos osztály simulated event GetPlayerViewPoint(out vector out_location, out Rotator out_rotation) super.getplayerviewpoint(out_location, out_rotation); if (Pawn!= none) Pawn.Mesh.SetOwnerNoSee(false); if (Pawn.Weapon!= none) Pawn.Weapon.SetHidden(true); out_location = Pawn.Location + PlayerViewOffset; out_rotation = rotator(pawn.location - out_location); simulated function PostBeginPlay() super.postbeginplay(); bnocrosshair = true; Elrejtjük a célkeresztet Elrejtjük a fegyvert
Saját játékos osztály
Saját játékos osztály Pakoljunk le egy szereplőt minden lövés kezdetekor: exec function StartFire(optional byte FireModeNum) super.startfire(firemodenum); MyAwesomeActor= spawn(class'awesomeactor',,,pawn.location);
Saját játékos osztály Minden lövés kezdetekor rejtsük el a karaktert 2 másodpercig: function MakeVisible() if (Pawn!= none) Pawn.SetHidden(false); exec function StartFire(optional byte FireModeNum) super.startfire(firemodenum); if (Pawn!= none) Pawn.SetHidden(true); SetTimer(2, false, 'MakeVisible');
Platform játék Hozzunk létre egy megfelelő pályát Oldjuk meg, hogy a játékos karakterét mindig oldalról lássuk: simulated event GetPlayerViewPoint(out vector out_location, out Rotator out_rotation) super.getplayerviewpoint(out_location, out_rotation); if (Pawn!= none) if (Pawn.Weapon!= none) Pawn.Weapon.SetHidden(true); Pawn.Mesh.SetOwnerNoSee(false); out_location = Pawn.Location + vect(-700, 0, 0); out_rotation.roll = 0; out_rotation.yaw = 0; out_rotation.pitch = 0;
Platform játék
Platform játék Jelenleg a játékos bármerre fordulhat, ezt ne engedjük meg: function UpdateRotation( float DeltaTime ) local Rotator DeltaRot, ViewRotation; ViewRotation = Rotation; DeltaRot.Yaw = Pawn.Rotation.Yaw; DeltaRot.Pitch = 0; ProcessViewRotation( DeltaTime, ViewRotation, DeltaRot ); SetRotation(ViewRotation);
Platform játék Korlátozzuk a játékos mozgását, csak jobbra és balra mozoghasson: state PlayerWalking function ProcessMove(float DeltaTime, vector NewAccel, edoubleclickdir DoubleClickMove, rotator DeltaRot) local Rotator temprot; if( Pawn == None ) return; Pawn.Acceleration.Y = 1 * PlayerInput.aStrafe * DeltaTime * 100 * PlayerInput.MoveForwardSpeed; Pawn.Acceleration.X = 0; Pawn.Acceleration.Z = 0; [ ]
Platform játék A játékos csak jobbra, vagy balra nézhet: temprot.pitch = Pawn.Rotation.Pitch; if(normal(pawn.acceleration) Dot Vect(0,1,0) > 0) temprot.yaw = 32768 / 2; Pawn.SetRotation(tempRot); else if(normal(pawn.acceleration) Dot Vect(0,1,0) < 0) temprot.yaw = 32768 / -2; Pawn.SetRotation(tempRot); CheckJumpOrDuck();
Platform játék A játékos nem arra lő, amerre néz Jelen van a célkereszt A lövésnél időnként fura hibák jelennek meg Hozzunk létre egy saját Pawn osztályt (ez reprezentálja a játékos karakterét) class AwesomeGame extends UTDeathMatch; defaultproperties PlayerControllerClass=class'AwesomeGame.SideScrollingController' DefaultPawnClass=class'AwesomeGame.AwesomePawn'
Platform játék class AwesomePawn extends UTPawn; simulated event BecomeViewTarget( PlayerController PC ) local UTPlayerController UTPC; Super.BecomeViewTarget(PC); if (LocalPlayer(PC.Player)!= none) UTPC = UTPlayerController(PC); if (UTPC!= None) UTPC.SetBehindView(true); SetMeshVisibility(UTPC.bBehindView); UTPC.bNoCrosshair = true; Közöljük a controllerrel, hogy külső kamera nézetet használunk
Platform játék Abba az irányba lőjön a karakter, amerre néz: simulated singular event Rotator GetBaseAimRotation() return Rotation;
Platform játék