AdvancedLocomotionSystemV4分析(五):镜头

录制_2020_10_31_14_52_47_579~2

上一篇留下了一个镜头抖动问题,实际上ALS项目是通过自定义CameraManager实现的,本篇就此来展开一下

AdvancedLocomotionSysemV4分析(一):移动和脚步IK

AdvancedLocomotionSystem分析(二):攀爬系统

AdvancedLocomotionSystemV4分析(三):动作叠加

AdvancedLocomotionSystemV4分析(四):布娃娃和起身

先大概简述一下ALS镜头控制的方法

  • 自定义CameraManager代替默认第三人称模板的SpringArm+Camera的方式
  • 重写BlueprintUpdateCamera
  • CameraManager挂载骨骼模型相机,创建动画蓝图,用曲线来控制相机位置信息

动画蓝图

ALS巧妙的用动画蓝图来辅助相机位置的控制和切换,如何做到的?我们先来看一下这是个什么动画蓝图

image-20201031141203030

随便打开一个角落

image-20201031141249269

所以说,动画蓝图没动画(lll¬ω¬)

完全是用动画蓝图的状态机来自然过渡各类曲线数据,所以显而易见的可以知道在其他地方会 用到这些曲线

ps.相机的骨骼模型你完全可以用一个球代替,曲线都是手动加的,不用到三维软件加

CameraManager

image-20201031141505810

先一个初始化方法把必要的参数给拿到,可以到PlayerController内初始化,毕竟CamaraManager本身就是配置在PlayerController

image-20201031141559486

然后重写BlueprintUpdateCamera方法,随意给一个判断,不满足就走默认的方式

image-20201031141650530

CustomCameraBehavior内有很多计算,我们逐一分析

image-20201031141736699

从角色内去获取必要的参数,PivotTarget是观察的目标点,1PTarget为第一人称的位置,第一人称会讲相机放到固定插槽位置,这里是眼睛的位置

image-20201031142246941

当前旋转向控制器旋转插值过去,速度由曲线RotationLagSpeed变量控制

image-20201031142342258

SmoothPivotTarget其实是当前的相机变换信息,插值向第一条的目标点

关于CalclateAxisIndependentLag内部是经过插值计算把CurrentLocationTargetLocation插值过渡

内部有一点不容易理解,如下图

image-20201031143027445

位置先反向旋转最后又给转回来,如果觉得很难理解,其实可以不加这部操作,区别不大

image-20201031143300660

然后再加上曲线PivotOffset_*的偏移后存为变量PivotLocation,简单粗暴

image-20201031143348227

然后加上相机偏移曲线CameraOffset_*存为变量TargetCameraLocation

关于CameraOffsetPivotOffset的区别

前者是相机的位置,后者是目标点的位置,其实换到大家熟悉的SpringArm来说,前者就是SocketOffset,后者就是TargetOffset,不熟悉的可以自己去试一试

image-20201031143540131

第三人称下的射线检测,其实就是做了一个类似SpringArmDoTestCollision的作用

image-20201031143628977

最后就是根据曲线返回第一人称还是第三人称的数据