通过蓝图实现
-
创建相机抖动资产
-
新建蓝图类:在内容浏览器中右键 > Blueprint Class,搜索并选择
CameraShakeBase
。 -
配置抖动参数:
-
Root Shake Pattern:选择抖动类型(如
Perlin Noise
模拟爆炸震动,Sinusoidal Wave
模拟机械晃动)。 -
振幅(Amplitude):控制抖动幅度,数值越大效果越强烈。
-
频率(Frequency):调整抖动速度,高频产生快速震动。
-
衰减半径(Falloff Radius):设置抖动随距离衰减的范围。
-
FOV 变化:勾选后可添加镜头视野抖动效果。
-
-
在蓝图中使用
CameraShakeSource
-
蓝图事件触发
-
添加组件:在需要触发抖动的 Actor(如角色、爆炸点)中添加
CameraShakeSource
组件。 -
事件图表配置:
-
蓝图事件:
[Event BeginPlay] → [Play Camera Shake]
|
└─[Shake Class] → 选择步骤1创建的抖动资产
└─[Scale] → 调整抖动强度(0~1)
└─[Duration] → 设置持续时间(默认-1为无限循环)
-
示例场景:玩家跳跃落地时触发抖动:
-
蓝图事件:
[Event Jump Ended] → [Play Camera Shake]
|
└─[Shake Class] → BP_JumpShake
└─[Scale] → 0.8
动态控制抖动
-
暂停 / 恢复:
-
蓝图事件:
[Pause Camera Shake] → 输入抖动实例引用
[Resume Camera Shake] → 输入抖动实例引用
-
动态调整参数:
-
蓝图事件:
[Get CameraShakeSource] → [Set Shake Scale] → 输入新强度值
通过C++实现
在UE5中,可以通过创建继承自 UCameraShakeBase
或旧版的 ULegacyCameraShake
的自定义类,并在运行时调用 APlayerController::ClientStartCameraShake
来实现摄像机抖动。下面我将分步演示如何用纯 C++ 完成这一流程,包括依赖配置、抖动类定义、参数设置、触发与调试,并给出一个可工作的示例。
-
添加模块依赖和头文件
首先,需要在项目的 Build.cs 文件中加入对摄像机抖动相关模块的依赖:
PublicDependencyModuleNames.AddRange(new string[] {
"Core", "CoreUObject", "Engine", "InputCore",
"EngineCameras" // 包含 CameraShakeBase 类和抖动模式 ◆ :contentReference[oaicite:0]{index=0}
});
然后,在使用的 .h
或 .cpp
文件开头包含:
#include "Camera/CameraShakeBase.h" // UCameraShakeBase 定义 ◆ :contentReference[