在Unreal中实现相机的震动

有时候需要画面更加具有冲击力,或者需要更强的打击感,使相机进行震动是不错的方案。

ULegacyCameraShake

在Unreal中实现了摄像机的震动,只需要继承ULegacyCameraShake类即可实现。

  • 创建CameraShake类。
  • 初始化该类的信息,包括相机震动的幅度,持续时间等等。
// CameraShake.cpp
UCameraShake::UCameraShake()
{
// 持续时间
OscillationDuration = 0.1f;
// 渐入时间
OscillationBlendInTime = 0.02f;
// 渐出时间
OscillationBlendOutTime = 0.02f;
// 振幅与频率
LocOscillation.X.Amplitude = 5.0f;
LocOscillation.X.Frequency = 5.0f;
LocOscillation.Y.Amplitude = 5.0f;
LocOscillation.Y.Frequency = 5.0f;
LocOscillation.Z.Amplitude = 5.0f;
LocOscillation.Z.Frequency = 5.0f;
RotOscillation.Pitch.Amplitude = 0.0f;
RotOscillation.Pitch.Frequency = 0.0f;
RotOscillation.Yaw.Amplitude = 0.0f;
RotOscillation.Yaw.Frequency = 0.0f;
RotOscillation.Roll.Amplitude = 0.0f;
RotOscillation.Roll.Frequency = 0.0f;
}

触发相机的震动

编写出发相机震动的函数,在需要触发震动时,调用该函数即可。

void ABasePawn::TriggerCameraShake()
{
APlayerController* PlayerController = UGameplayStatics::GetPlayerController(this, 0);
if (PlayerController && PlayerController->PlayerCameraManager)
{
PlayerController->PlayerCameraManager->StartCameraShake(UCameraShake::StaticClass());
}
}