关于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参数是进行工作的。

相关推荐
汉克老师4 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码4 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
影视飓风TIM5 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
C++ 老炮儿的技术栈5 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
xxwxx__6 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
wuminyu6 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++
郝学胜-神的一滴6 小时前
C++11 工程级应用 08:Lambda表达式与Tuple元组
开发语言·jvm·c++·python·程序人生·开源
水饺编程7 小时前
第5章,[Win32 章节] :圆角矩形教学插图绘制程序
c语言·c++·windows·visual studio
Existence_Time7 小时前
CSP 考前复习
c++
zerwave8 小时前
从零实现简化 DDS 完整技术文档(含模块作用与详细注释)
linux·c++·机器人