原型化的相机,方便实时调节

Posted on 2012-12-25 22:25  neocsl  阅读(268)  评论(0编辑  收藏  举报

  使用原型可以大幅方便虚幻引擎的实时效果查看,对于Camera和HUD来说简直就是绝配武器。我们已经不满足于编译程序再看效果这种原始时代步骤了。

1.新建一个Camera类,内部只有一些简单的内容

var vector DesiredCameraLocation;   //预指位置

var Pawn HeroPawn;   //要追随的目标

function SetDesiredCameraLocation(vector NewDesiredCameraLocation)

{

     DesiredCameraLocation=NewDesiredCameraLocation;
}

  很简单的开始不是吗?

2.开始衍生具体的内容

  新摄像机继承原始的,这可以让我们选择使用不同的摄像机模式,例如你在游戏中还希望使用横版TopDown和Platform结合的方式。

var CameraProperties_TopDown CameraProperties;

  上边的CameraProperties不得了就是圆型类。

var vector SecondDesiredCameraLocation;   //第二个摄像机预指位置

  重新定义上边的函数内容为第二个

function SetDesiredCameraLocation(vector NewDesiredCameraLocation)

{

    SecondDesiredCameraLocation=NewDesiredCameraLocation;
}

  下面才是相机问题的核心函数,UpdateViewTarget

function UpdateViewTarget(out TViewTarget OutVT,float DeltaTime)
{
    
}

  该函数内部满足OutVT.POV.Location即是相机的实时位置,OutVT.POV.Rotation即是相机的实时方向。同时使用线性插值可以满足相机的平滑过渡。

local vector TargeLocation;

//get player's location
if(AntPawn(GetALocalPlayerController.Pawn)!=none)
{
    TargetLocation=AntPawn(GetALocalPlayerController.pawn);
}

//in case we can't get the location
TargetLocation=OutVT.Target.Location;

DesiredCameraLocation=TargetLocation-vector(cameraproperties.rotation)*CameraProperties.HoverDistance;

OutVT.POV.Location=VLerp(OutVT.POV.Location,DesiredCameraLocation,CameraProperties.BlendSpeed*DeltaTime);

OutVT.POV.Rotation=CameraProperties.Rotation;

defaultproperties中定义CameraProperties的原型引用即可。