staticmesh를 포함하고있는 kactor와 skeletalmesh를 포함하고있는 kasset을 실습해봤습니다.
UDK에는 Engine폴더의 staticmesh인 TextPropCube를 레벨에 AddRigidBody 하였습니다.
나머지 하나인 kasset은 http://download.udk.com/tutorials/using-udk/3dbuzz_assets.zip 에서 받은 파일을 사용했습니다. package라는 파일안에 physics_asset.upk를
UDKGame->content->3dbuzz(폴더생성) 에 집어넣고 UDK에서 fully load했습니다. 그렇게 표시된것중 SKM_Wire 를 새 피직스 애셋 생성했습니다.
그렇게 새 피직스 생성한것을 레벨에 추가해줬습니다.
이렇게 두 개의 kactor와 kasset을 레벨에 추가해놓고 이 두개를 클릭하면 정면이나 45도 각도로 날라가야합니다.
(모바일 프리뷰어에서 실행합니다.)
근데 아무리 클릭해도 날라가질 않습니다. 밑에는 이를 구현한 4개의 파일입니다.
[exampleCh42Game.uc]
[exampleCh42PC.uc]
[RigidBody.uc]
[RopeSection.uc]
위의 코드대로 실행해보면
event OnEngineHasLoaded(){
WorldInfo.Game.Broadcast(self,"exampleCh42Game Type Active-Enegine Has Loaded!!!");
}
이 부분은 정상적으로 작동되지만 나머지 kactor와 kasset을 클릭할때는 무반응입니다.
사실 RigidBody와 RopeSection 클래스는 혹시나해서 만든 파일입니다.
kactor와 kasset을 구현하는데있어서 빼먹은 부분이나 잘못 코드를 작성한게있는건가요?
UDK에는 Engine폴더의 staticmesh인 TextPropCube를 레벨에 AddRigidBody 하였습니다.
나머지 하나인 kasset은 http://download.udk.com/tutorials/using-udk/3dbuzz_assets.zip 에서 받은 파일을 사용했습니다. package라는 파일안에 physics_asset.upk를
UDKGame->content->3dbuzz(폴더생성) 에 집어넣고 UDK에서 fully load했습니다. 그렇게 표시된것중 SKM_Wire 를 새 피직스 애셋 생성했습니다.
그렇게 새 피직스 생성한것을 레벨에 추가해줬습니다.
이렇게 두 개의 kactor와 kasset을 레벨에 추가해놓고 이 두개를 클릭하면 정면이나 45도 각도로 날라가야합니다.
(모바일 프리뷰어에서 실행합니다.)
근데 아무리 클릭해도 날라가질 않습니다. 밑에는 이를 구현한 4개의 파일입니다.
[exampleCh42Game.uc]
Code:
class exampleCh42Game extends FrameworkGame; event OnEngineHasLoaded(){ WorldInfo.Game.Broadcast(self,"exampleCh42Game Type Active-Enegine Has Loaded!!!"); } function bool PreventDeath(Pawn KilledPawn, Controller Killer, class<DamageType> DamageType, vector HitLocation){ return true; } static event class<GameInfo> SetGameType(string MapName, string Options,string Portal){ return super.SetGameType(MapName,Options,Portal); } DefaultProperties { PlayerControllerClass=class'exampleCh42.exampleCh42PC' DefaultPawnClass=class'UDKBase.SimplePawn' HUDType=class'UDKBase.UDKHUD' bRestartLevel=false bWaitingToStartMatch=true bDelayedStart=false }
Code:
class exampleCh42PC extends SimplePC; var float PickDistance; function ApplyForceRigidBody(Actor SelectedActor,Vector ImpulseDir, float ImpulseMag,Vector HitLocation){ if(SelectedActor.IsA('KActor')){ WorldInfo.Game.Broadcast(self,"***Thrown object"@SelectedActor@",ImpulseDir="@ImpulseDir@",ImpulseMag="@ImpulseMag@",HitLocation="@HitLocation); SelectedActor(SelectedActor).ApplyImpulse(ImpulseDir,ImpulseMag,HitLocation); } else if(SelectedActor.IsA('KAsset')){ WorldInfo.Game.Broadcast(self,"***Thrown object"@SelectedActor@",ImpulseDir="@ImpulseDir@",ImpulseMag="@ImpulseMag@",HitLocation="@HitLocation); SelectedActor(SelectedActor).SkeletalMeshComponent. AddImpulse(ImpulseDir*ImpulseMag,,'Bone06'); }else{ WorldInfo.Game.Broadcast(self,"!!!ERROR Selected Actor"@SelectedActor@ "is not a Kactor,you can not apply an impulse to this object!!"); } } function Actor PickActor(Vector2D PickLocation,out Vector HitLocation, out TraceHitInfo HitInfo){ local Vector TouchOrigin,TouchDir,HitNormal; local Actor PickedActor; local vector Extent; PickLocation.X=PickLocation.X/ViewportSize.X; PickLocation.Y=PickLocation.Y/ViewportSize.Y; LocalPlayer(Player).Deproject(PickLocation,TouchOrigin,TouchDir); Extent=vect(0,0,0); PickedActor=Trace(HitLocation,HitNormal,TouchOrigin+(TouchDir*PickDistance),TouchOrigin ,True,Extent,HitInfo); return PickedActor; } function bool SwipeZoneCallback(MobileInputZone Zone,float DeltaTime,int Handle, ETouchType EventType,Vector2D TouchLocation){ local bool retval; local Actor PickedActor; local Vector HitLocation; local TraceHitInfo HitInfo; local Vector ImpulseDir; local float ImpulseMag; retval=true; if(EventType==Touch_Began){ PickedActor=PickActor(TouchLocation,HitLocation,HitInfo); WorldInfo.Game.Broadcast(self,"PickedAcotr="@PickedActor@",HitLocation="@HitLocation@",Zone Touched="@Zone); ImpulseDir=Normal(Vector(Pawn.Rotation))+vect(0,0,1); ImpulseMag=100; ApplyForceRigidBody(PickedActor,ImpulseDir,ImpulseMag,HitLocation); }else if(EventType==Touch_Moved){ }else if(EventType==Touch_Ended){ } return retval; } function SetupZones(){ Super.SetupZones(); if(MPI!=None&&WorldInfo.GRI.GameClass!=none){ LocalPlayer(Player).ViewportClient.GetViewportSize(ViewportSize); if(FreeLookZone!=none){ FreeLookZone.OnProcessInputDelegate=SwipeZoneCallback; } } } defaultproperties{ PickDistance=10000; }
Code:
class RigidBody extends KActor; defaultproperties { Begin Object Class=StaticMeshComponent Name=RigidBodyMesh StaticMesh=StaticMesh'EditorMeshes.TexPropCube' End Object StaticMeshComponent=RigidBodyMesh Components.Add(RigidBodyMesh) }
Code:
class RopeSection extends KAssetspawnable; defaultproperties { Begin Object Class=SkeletalMeshComponent Name=RopeSection SkeletalMesh=SkeletalMesh'physics_assets.SKM_Wire' PhysicsAsset=PhysicsAsset'physics_assets.SKM_Wire_Physics' End Object SkeletalMeshComponent=RopeSection Components.Add(RopeSection) }
event OnEngineHasLoaded(){
WorldInfo.Game.Broadcast(self,"exampleCh42Game Type Active-Enegine Has Loaded!!!");
}
이 부분은 정상적으로 작동되지만 나머지 kactor와 kasset을 클릭할때는 무반응입니다.
사실 RigidBody와 RopeSection 클래스는 혹시나해서 만든 파일입니다.
kactor와 kasset을 구현하는데있어서 빼먹은 부분이나 잘못 코드를 작성한게있는건가요?
Comment