车辆追逐摄像机
追逐摄像机
追逐摄像机是车辆 Pawn 的第三人称摄像机。你可以用视角输入绕车环视;当你停止转动视角时,只要车辆开始移动,它就会缓动回到车后。它通过控制 Pawn 上某个弹簧臂的视图来工作。它独立于 Crushform 的其他部分:它不需要插件核心的任何内容,核心也不需要它。插件的示例 Pawn 使用了它。
弹簧臂。 摄像机驱动其拥有者的某个弹簧臂的世界旋转,该弹簧臂按名称选择。它会将该弹簧臂切换为绝对旋转,这样车辆转向时不会带动摄像机一起转动。
视角。 两个 Axis 1D 输入动作为摄像机提供输入:一个用于偏航(左右转),一个用于俯仰(上下看),其中正值表示向上看。摄像机会在 Pawn 处于本地控制时,将它们绑定到 Pawn 的 Enhanced Input 组件上。视角动作的值以度为单位。鼠标通过其灵敏度换算,摇杆则按帧时间缩放。
视角阈值。 只有当视角输入在大约四分之一秒内累计达到 Look Threshold(2 度)时,才算作一次转动视角。较小的抖动,例如鼠标传感器的噪声,或刚好超过死区的摇杆,只会让视角轻微转动,并保持跟随状态。一次转动视角会暂停摄像机的跟随,并重新开始等待。
跟随。 在没有转动视角的情况下经过 Follow Delay(1.5 秒)后,摄像机会缓动回到车后。当车辆以 Min Follow Speed(200 厘米/秒)或更快的速度向前或侧向移动时,它会跟随行驶方向。低于该速度时,以及车辆倒车时,它会改为跟随车辆的朝向,因此几乎静止的车不会让摄像机摆动。俯仰会缓动回到 Default Pitch。
起始速度。 低于 Follow Start Speed(50 厘米/秒)时,摄像机完全不会缓动回到车后。它会停留在原处,因此你可以环视一辆静止的车。低于该速度时跟随延迟仍会继续倒计时,因此延迟结束后,车辆一达到该速度,摄像机就开始跟随。将其设为 0,摄像机也会回到静止车辆的后方。
跟随速率。 摄像机每帧都会靠近剩余角度的一部分。这一比例随车速上升:在 Min Follow Speed 时为 Min Follow Rate,在 Full Follow Speed(2500 厘米/秒)时为 Max Follow Rate,超过该速度后保持不变。
归位。 SnapBehind 会立即将摄像机放到车后,俯仰为默认值。摄像机会在游戏开始时、Pawn 重新启动时调用它,你也可以在车辆瞬移后自行调用它。
专用服务器。 摄像机在专用服务器上不进行 tick。
- 确认 Pawn 上有一个弹簧臂,其末端有一个摄像机。弹簧臂位于 Components 面板中,摄像机是它的子项。
- 打开 Pawn 的蓝图。在 Components 面板中点击 Add,选择 CFVehicle Chase Camera。它位于 Crushform 分组中。编译并保存。
- 选中追逐摄像机。将 Spring Arm 设为 Pawn 的弹簧臂。
- 将 Yaw Action 和 Pitch Action 分别设为两个 Axis 1D 输入动作,每个对应一个视角方向。插件在其 Input 文件夹中提供了示例动作
IA_LookAround和IA_LookUp。
| Camera | ||
|---|---|---|
| Spring Arm | ||
| Tuning | ||
| Min Pitch | ||
| Max Pitch | ||
| Default Pitch | ||
| Follow Delay | 1.5 s | |
| Look Threshold | 2.0° | |
| Follow Start Speed | 50.0 cm/s | |
| Min Follow Speed | 200.0 cm/s | |
| Full Follow Speed | 1000.0 cm/s | |
| Min Follow Rate | 1.0 | |
| Max Follow Rate | 4.0 | |
| Input | ||
| Yaw Action | IA_LookAround | |
| Pitch Action | IA_LookUp | |
- 只有当默认手感不合适时,才调整 Tuning 的值。默认值见下方的主要设置。
摄像机需要 Enhanced Input 插件,因为它将两个动作绑定到 Enhanced Input 组件上。
在蓝图中,常见的任务是通过触摸摇杆转动视角,以及在重生后将摄像机放到车后。以度为单位,调用 AddLookInput 并传入偏航和俯仰值;车辆瞬移后调用 SnapBehind。
C++ 中的相同调用。先从 Pawn 获取摄像机,然后调用其函数。签名以头文件中的为准。你的模块必须在 Build.cs 中列出 Crushform 模块,参见安装。
#include "CFVehicleChaseCameraComponent.h"
void AMyPawn::OnTouchLook(const float YawDegrees, const float PitchDegrees){ if (UCFVehicleChaseCameraComponent* Camera = FindComponentByClass<UCFVehicleChaseCameraComponent>()) { Camera->AddLookInput(YawDegrees, PitchDegrees); }}
void AMyPawn::Respawn(const FVector& Location){ SetActorLocation(Location); if (UCFVehicleChaseCameraComponent* Camera = FindComponentByClass<UCFVehicleChaseCameraComponent>()) { Camera->SnapBehind(); }}如果你自己绑定视角动作,BindLookInput 接受 Pawn 的 Enhanced Input 组件。它会替换摄像机之前所做的绑定。
以下设置位于 UCFVehicleChaseCameraComponent 上,但调节值除外:调节值位于 Tuning 属性中的 FCFVehicleChaseCameraTuning 上。角度以度为单位,速度以厘米/秒为单位,速率以 1/秒为单位。
检查是否正常工作
Section titled “检查是否正常工作”- 按 Play,向前驾驶汽车。摄像机会跟在车后。
- 拖动鼠标。视角会立即转动。松开并等待约 1.5 秒。摄像机会缓动回到车后。
- 等摄像机稳定在车后,然后倒车。它会转向车头,而不是行驶方向。
- 停下车辆。拖动鼠标看向一侧,松开并等待几秒。摄像机会停留在你转到的位置。开车起步后,它会缓动回到车后。
摄像机没有声明统计组,因此没有控制台输出。请目测检查。
摄像机已关闭,日志提示弹簧臂未指定名称
Section titled “摄像机已关闭,日志提示弹簧臂未指定名称”原因。 Spring Arm 没有指向 Pawn 上的某个弹簧臂组件。摄像机会自行关闭。
修复。 将 Spring Arm 设为 Pawn 的弹簧臂组件。
视角输入没有任何作用
Section titled “视角输入没有任何作用”原因。 有三种可能。Yaw Action 或 Pitch Action 为空;Pawn 的输入组件不是 Enhanced Input 组件;或 Pawn 不是本地控制的,因此没有任何绑定。
修复。 同时设置两个动作,为 Pawn 使用 Enhanced Input,并检查 Pawn 是否由本地玩家控制。
摄像机没有回到车后
Section titled “摄像机没有回到车后”原因。 视角输入一直在持续。在大约四分之一秒内累计达到 Look Threshold 的输入会算作一次转动视角,每次转动都会重新开始等待。摇杆漂移超过死区时就可能出现这种情况。
修复。 为摇杆映射添加死区;如果摇杆漂移大于默认值所能容忍的范围,则提高 Look Threshold。
摄像机没有回到缓慢行驶车辆的后方
Section titled “摄像机没有回到缓慢行驶车辆的后方”原因。 车速低于 Follow Start Speed。低于该速度时,摄像机不会缓动回到车后。
修复。 降低 Follow Start Speed,或将其设为 0,使摄像机在任何速度下都会缓动回到车后。
摄像机转到了静止车辆的后方
Section titled “摄像机转到了静止车辆的后方”原因。 Follow Start Speed 为 0,或低于静止车辆抖动时的速度。
修复。 将 Follow Start Speed 提高到该抖动之上。
