AdvancedLocomotionSystemV4分析(五):镜头
上一篇留下了一个镜头抖动问题,实际上ALS项目是通过自定义
CameraManager
实现的,本篇就此来展开一下
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSystem分析(二):攀爬系统
AdvancedLocomotionSystemV4分析(三):动作叠加
AdvancedLocomotionSystemV4分析(四):布娃娃和起身
先大概简述一下ALS
镜头控制的方法
- 自定义
CameraManager
代替默认第三人称模板的SpringArm
+Camera
的方式 - 重写
BlueprintUpdateCamera
CameraManager
挂载骨骼模型相机,创建动画蓝图,用曲线来控制相机位置信息
动画蓝图
ALS
巧妙的用动画蓝图来辅助相机位置的控制和切换,如何做到的?我们先来看一下这是个什么动画蓝图
随便打开一个角落
所以说,动画蓝图没动画(lll¬ω¬)
完全是用动画蓝图的状态机来自然过渡各类曲线数据,所以显而易见的可以知道在其他地方会 用到这些曲线
ps.相机的骨骼模型你完全可以用一个球代替,曲线都是手动加的,不用到三维软件加
CameraManager
先一个初始化方法把必要的参数给拿到,可以到PlayerController
内初始化,毕竟CamaraManager
本身就是配置在PlayerController
内
然后重写BlueprintUpdateCamera
方法,随意给一个判断,不满足就走默认的方式
在CustomCameraBehavior
内有很多计算,我们逐一分析
从角色内去获取必要的参数,PivotTarget
是观察的目标点,1PTarget
为第一人称的位置,第一人称会讲相机放到固定插槽位置,这里是眼睛的位置
当前旋转向控制器旋转插值过去,速度由曲线RotationLagSpeed
变量控制
SmoothPivotTarget
其实是当前的相机变换信息,插值向第一条的目标点
关于CalclateAxisIndependentLag
内部是经过插值计算把CurrentLocation
向TargetLocation
插值过渡
内部有一点不容易理解,如下图
位置先反向旋转最后又给转回来,如果觉得很难理解,其实可以不加这部操作,区别不大
然后再加上曲线PivotOffset_*
的偏移后存为变量PivotLocation
,简单粗暴
然后加上相机偏移曲线CameraOffset_*
存为变量TargetCameraLocation
关于
CameraOffset
与PivotOffset
的区别前者是相机的位置,后者是目标点的位置,其实换到大家熟悉的
SpringArm
来说,前者就是SocketOffset
,后者就是TargetOffset
,不熟悉的可以自己去试一试
第三人称下的射线检测,其实就是做了一个类似SpringArm
的DoTestCollision
的作用
最后就是根据曲线返回第一人称还是第三人称的数据