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

相关推荐
GalaxyPokemon5 分钟前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi11 分钟前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
tadus_zeng1 小时前
Windows C++ 排查死锁
c++·windows
EverestVIP1 小时前
VS中动态库(外部库)导出与使用
开发语言·c++·windows
胡斌附体2 小时前
qt socket编程正确重启tcpServer的姿势
开发语言·c++·qt·socket编程
GalaxyPokemon2 小时前
Muduo网络库实现 [十] - EventLoopThreadPool模块
linux·服务器·网络·c++
守正出琦2 小时前
日期类的实现
数据结构·c++·算法
ChoSeitaku2 小时前
NO.63十六届蓝桥杯备战|基础算法-⼆分答案|木材加工|砍树|跳石头(C++)
c++·算法·蓝桥杯
YueiL2 小时前
C++入门练习之 给出年分m和一年中的第n天,算出第n天是几月几号
开发语言·c++·算法
我不想当小卡拉米2 小时前
C++:继承+菱形虚拟继承的一箭双雕
开发语言·jvm·c++