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

相关推荐
小溪学编程18 分钟前
从 C++ 的规范变迁看语言发展
jvm·c++·面试
ShineWinsu1 小时前
对于Redis:string类型的解析
java·c++·redis·分布式·缓存·面试·string
YYYing.2 小时前
【设计模式系列 (七) 】桥接模式
c++·后端·设计模式·桥接模式
高山有多高3 小时前
【Linux笔记】Linux自定义Shell
linux·c++
悠仁さん3 小时前
【C++】vector 类
开发语言·c++
_upupup3 小时前
智能指针的原理及简单模拟实现(C++)
开发语言·c++
l1t3 小时前
DeepSeek总结的OpenZL压缩变换器
c++·算法
郝学胜-神的一滴4 小时前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
坤坤子吖4 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
朝朝辞暮i4 小时前
C++ 第 14 课:引用 &
开发语言·c++·算法