关于UE的相机震动CameraShake

创建CameraShake资源

CameraShake配置是个蓝图类,我们选择创建BlueprintClass,父类选择CameraShakeBase即可。

参数调整

目前主要用到了

LocationAmplitudeMultiplier = 1

LocationFrequencyMultiplier = 10

RotationAmplitudeMultiplier= 1

RotationFrequencyMultiplier = 10

其他参数应该也有各自的效果

使用CameraShake

游戏内使用

主要有以下几种调用方式

  1. 使用PlayerController进行调用
  2. 给CameraActor添加组件UCameraShakeSourceComponent,调用组件函数
  3. 使用UGameplayStatics的静态函数,这种方法内部也是取到PlayerController,然后调用PlayerController的接口

Editor 内使用

这个Editor内使用指的是我们在开发一些工具编辑器,编辑器内部需要使用CameraShake功能。因为编辑器下一般没有PlayerController,因此我们要借助FCameraShakePreviewer* CameraShakePreviewer对视口进行抖动。这个方法可以参考在动画编辑器视口下预览摄像机晃动Camerahttps://zhuanlan.zhihu.com/p/604965454

编辑器模式下,相机抖动最终是要反馈给到Viewport的。我们可以按照如下步骤进行处理

cpp 复制代码
1.声明 class FCameraShakePreviewer* CameraShakePreviewer = nullptr;

2.创建实例
	CameraShakePreviewer = new FCameraShakePreviewer();
    //创建的时候,绑定到对应的World
	CameraShakePreviewer->Initialize(World); 
    //销毁的时候delete即可

3.在Tick函数调用Update函数驱动更新
	CameraShakePreviewer->Update(DeltaTime, true);

4.封装相机震动接口
void YourTool::AddCameraShake(TSubclassOf<UCameraShakeBase> ShakeClass, UCameraShakeSourceComponent* ShakeSourceComponent)
{
	UCameraModifier_CameraShake* const PreviewCameraShake = CameraShakePreviewer->GetCameraModifier();
	FAddCameraShakeParams Params;
	Params.SourceComponent = ShakeSourceComponent;
	Params.Scale = 1.0;
	Params.PlaySpace = ECameraShakePlaySpace::World;;
	PreviewCameraShake->AddCameraShake(ShakeClass, Params);
}


5.把震动效果反馈给Viewport
我们的编辑器肯定是有视口FEditorViewportClient* EditorViewportClient
对视口的ViewModifiers进行绑定
EditorViewportClient->ViewModifiers.AddRaw(this, &YourTool::ModifyViewportClientView);

6.实现函数YourTool::ModifyViewportClientView
void YourTool::ModifyViewportClientView(FEditorViewportViewModifierParams& Params)
{
    CameraShakePreviewer->ModifyView(Params);
}

7.最终调用
拿到我们要处理的相机CameraActor,调用AddCameraShake接口即可
YourToolInstance->AddCameraShake(CameraShakeClass, CameraActor->ShakeSourceComponent)

		

可见这种方法是通过给Camera挂接组件UCameraShakeSourceComponent,然后结合FCameraShakePreviewer传入CameraShakeBase参数是进行工作的。

相关推荐
bu_shuo1 天前
Visual C++2010学习版(全国计算机等级二级考试版)安装记录
c++·cpp·visual c++·计算机二级
Titan20241 天前
Linux环境变量个人笔记
linux·服务器·c++
记忆多1 天前
c++名字空间 函数模版 左右值
开发语言·c++·算法
2401_889884661 天前
高性能计算通信库
开发语言·c++·算法
肆忆_1 天前
# cilly-vm-cpp 重构复盘(第 1 阶段:SRP)
c++
天若有情6731 天前
循环条件隐藏陷阱:我发现了「同循环双条件竞态问题」
c++·学习·算法·编程范式·while循环··竞态
是梦终空1161 天前
C++中的职责链模式变体
开发语言·c++·算法
mjhcsp1 天前
C++遗传算法(Genetic Algorithm,GA):进化式全局优化的核心解析
开发语言·c++
仰泳的熊猫1 天前
题目2270:蓝桥杯2016年第七届真题-四平方和
c++·算法·蓝桥杯
Aaswk1 天前
蓝桥杯2025年第十六届省赛真题(更新中)
c语言·数据结构·c++·算法·职场和发展·蓝桥杯