Zunächst fügen wir jetzt eine neue Variabel zur Variabel Liste hinzu:

//Variable List
var name EyeSocket; //Name des Sockets an dem die Kamera befestigt werden soll

Anschließend weisen wir dieser  Variabel in den Default-Properties den Namen unseres Augen-Sockets zu:
Am Ende der Zuweisung fehlt kein Semikolon, bei den Default Eigenschaften, werden keine verwendet.

defaultproperties
{
        EyeSocket=Eyes
}

Nun überschreiben wir eine Funktionen um die Kamera an dem Socket zu befestigen:

//Functions
/* GetViewRotation
Aufgerufen von UDKPlayerController::GetPlayerViewPoint(),
welche wiederum von der aktuellen Kamera aufgerufen wird 
*/
//Entferne die Kommentarzeichen (/* */) um die folgende Funktion um immer die genaue Rotation des Sockets zu nutzen 
//Das bedeutet, dass auch die Bewegung der Animation mit einbezogen wird.
/* 
simulated event rotator GetViewRotation() 
{
        local vector out_Loc;
        local rotator out_Rot;
        // Pruefen ob EyeSocket korrekt zu gewiesen wurde
        if (EyeSocket == '')
                return Super.GetViewRotation();
        Mesh.GetSocketWorldLocationAndRotation(EyeSocket, out_Loc, out_Rot); return out_Rot;
} */

/*
GetPawnViewLocation
Eine andere Klasse möchte die Position unserer Augen haben
*/
simulated event Vector GetPawnViewLocation()
{
        local vector viewLoc;

        // Pruefen ob EyeSocket korrekt zu gewiesen wurde
        if (EyeSocket == '')
                return Location + BaseEyeHeight * vect(0,0,1);

        Mesh.GetSocketWorldLocationAndRotation(EyeSocket, viewLoc);

        return viewLoc;
}

Okay, die Kernfunktionen sind nun implementiert. Nun müssen wir nur noch unserem Pawn sagen, welches SkeletalMesh er benutzen soll:

Dieser Code kommt nun zu der Zuweisung von oben in die Default-Properties:

Begin Object Class=SkeletalMeshComponent Name=PawnSkeletalMeshComponent
        //Your Mesh Properties
        SkeletalMesh=SkeletalMesh'CH_IronGuard_Male.Mesh.SK_CH_IronGuard_MaleA'
        AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
        PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
        AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale'
        Translation=(Z=8.0)
        Scale=1.075
        //General Mesh Properties
        bCacheAnimSequenceNodes=FALSE
        AlwaysLoadOnClient=true
        AlwaysLoadOnServer=true
        bOwnerNoSee=false
        CastShadow=true
        BlockRigidBody=TRUE
        bUpdateSkelWhenNotRendered=false
        bIgnoreControllersWhenNotRendered=TRUE
        bUpdateKinematicBonesFromAnimation=true
        bCastDynamicShadow=true
        RBChannel=RBCC_Untitled3
        RBCollideWithChannels=(Untitled3=true)
        bOverrideAttachmentOwnerVisibility=true
        bAcceptsDynamicDecals=FALSE
        bHasPhysicsAssetInstance=true
        TickGroup=TG_PreAsyncWork
        MinDistFactorForKinematicUpdate=0.2
        bChartDistanceFactor=true
        RBDominanceGroup=20
        bUseOnePassLightingOnTranslucency=TRUE
        bPerBoneMotionBlur=true
End Object
Mesh=PawnSkeletalMeshComponent
Components.Add(PawnSkeletalMeshComponent)

Okay, jetzt müssen wir lediglich noch eine neue „GameInfo“, also quasi einen Spielmodus erstellen, der dem Spiel sagt, dass wir unseren MyPawn verwenden wollen.

Wir legen eine neue Datei MyGameInfo.uc in unserem Ordner an und tragen dort diesen Code ein:

class MyGameInfo extends UDKGame;

defaultproperties
{
	DefaultPawnClass=class'MyPawn'
	Name="Default__MyGameInfo"
}

Jetzt starten wir das UnrealFrontend (im bin Ordner von UDK) und compilieren unsere Scripte.

compileLief die Compelierung erfolgreich ab:

erfolgKönnen wir unser  VR-Spiel in UDK Testen!

Jetzt legen wir eine neue Karte an oder wählen die, die wir an Tag 1 erstellt haben, und wählen unseren Spieltyp in den World Properties aus:

GameTypewählenIn dem Feld „Game Type For PIE“ sollte derselbe Modus ausgewählt werden. Dieser Spielmodus wird verwendet, wenn man das Spiel über das blaue „Play“ Symbol im Editor startet.

Auf der nächsten Seite gibt es dann nochmal den Code von der MyPawn.uc im Ganzen und Screenshots von unserem Ergebnis:

Tagged: , , , , , , , , , ,

Geschrieben von Daniel Korgel

Ich bin Daniel Korgel und bin ein selbständiger Software Entwickler im Bereich Virtual Reality. Ich programmiere in meiner Freizeit schon sehr lange und bin gut unterwegs mit C# (& .Net), Java, HTML, PHP und MYSQL. Kenntnisse in C, C++ und Assembler sind aber auch vorhanden. Zudem arbeite ich derzeit auch an meinem Bachelor. In meiner Freizeit sammle ich alte Spielekonsolen und bin auch hin und wieder im Skatepark anzutreffen. Twitter: @DakorVR , @Bloculus_de| Xing: xing.com/profiles/Daniel_Korgel

This article has 2 comments

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert