使用原型可以大幅方便虚幻引擎的实时效果查看,对于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的原型引用即可。