关于UE的相机震动CameraShake

news2024/9/20 9:30:24

创建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对视口进行抖动。这个方法可以参考在动画编辑器视口下预览摄像机晃动Cameraicon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/604965454

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【3月16日-云服务器推荐】京东云降价了!!4折变2折 阿里云 腾讯云最新价格对比 选购指南 搭建博客 游戏服务器均可多用

3月16日更新&#xff0c;京东云又双叒降价了&#xff01; 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】云服务器1分钟教会你如何选择教程 https://docs.qq.com/document/DV0RCS0lGeH…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;直接改进即可&#x1f680;&#x1f680;&#x1f…

leetcode每日一题--矩阵中移动的最大次数

一.题目原型 二.思路解析 1.动态规划 这道题要求的是矩阵的最大移动次数。根据题目意思&#xff0c;从索引 0 列开始向右移动&#xff0c;每次移动一列&#xff0c;最多移动到 n - 1 列&#xff0c;也就是 n - 1次。其移动规则为&#xff1a;当前单元格可以移动到其右上方、正…

安装PYQT5 遇到Microsoft Visual C++ 14.0 is required解决方法

# Time: 2024/03/16 #Author: Xiaohong # 运行环境: OS: Windows 7 旗舰版 # Python: 3.7.9 Pyqt5 # 目的: 解决安装PYQT5 遇到Microsoft Visual C 14.0 is required 1.安装PYQT5时&#xff0c;遇到Microsoft Visual C 14.0 is required&#xff0c;如图 2.查Microsoft…

Yolo系列算法-理论部分-YOLOv1

0. 紧接上一篇目标检测算法的介绍 基于深度学习的目标检测算法概述-CSDN博客 本篇YOLO算法系列&#xff0c;参考优秀作者-AI菌&#xff0c;文章链接&#xff1a;YOLO系列算法精讲&#xff1a;从yolov1至yolov8的进阶之路&#xff08;2万字超全整理&#xff09;_yolov9-CSDN博…

MySQL:SQL优化

1. 插入优化 使用insert语句单条单条数据插入效率偏低&#xff0c;建议使用insert批量插入数据&#xff0c;批量控制在500-1000条数据较为合适&#xff0c;当面对数以百万的数据时&#xff0c;可以使用load指令&#xff0c;提升插入数据效率 相关指令 #客户端连接服务端加上参…

2.3 HTML5新增的常用标签

2.3.1 HTML5新增文档结构标签 在HTML5版本之前通常直接使用<div>标签进行网页整体布局&#xff0c;常见布局包括页眉、页脚、导航菜单和正文部分。为了区分文档结构中不同的<div>内容&#xff0c;一般会为其配上不同的id名称。例如&#xff1a; <div id"h…

145 Linux 网络编程1 ,协议,C/S B/S ,OSI 7层模型,TCP/IP 4层模型,

一 协议的概念 从应用的角度出发&#xff0c;协议可理解为“规则”&#xff0c;是数据传输和数据的解释的规则。 典型协议 传输层 常见协议有TCP/UDP协议。 应用层 常见的协议有HTTP协议&#xff0c;FTP协议。 网络层 常见协议有IP协议、ICMP协议、IGMP协议。 网络接口层 常…

关于振弦采集仪的应用编写

instruction&#xff1a; 1、本应用基于深圳市安传物联科技有限公司所生产的八通道振弦变送器产品。该产品为MAX485 信号的变送设备&#xff0c; 并以Modbus协议输出。 2、本应用采用python语言编写。 功能实现&#xff1a; 1、发送&#xff1a; 01 03 10 00 00 02 C0 CB并…

Android分区存储到底是怎么回事

文章目录 一、Android存储结构二、什么是分区存储&#xff1f;三、私有目录和公有目录三、存储权限和分区存储有什么关系&#xff1f;四、我们应该该怎么做适配&#xff1f;4.1、利用File进行操作4.2、使用MediaStore操作数据库 一、Android存储结构 Android存储分为内部存储和…

Linux安装vLLM模型推理框架问题总汇

简介 vLLM 是一个专为大规模语言模型&#xff08;Large Language Models, LLM&#xff09;推理优化的服务框架和推理引擎。它可以高效地管理和部署预先训练好的大型语言模型&#xff0c;尤其是那些具有极高参数数量和复杂度的模型&#xff0c;如GPT系列及其他基于Transformer架…

算法打卡day19|二叉树篇08|Leetcode 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

算法题 Leetcode 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 大佬视频讲解&#xff1a;二叉搜索树的最近公共祖先视频讲解 个人思路 昨天做过一道二叉树的最近公共祖先&#xff0c;而这道是二叉搜索树&#xff0c;那就要好好利用这个有序的特点…

数据库-mysql安装

我们使用两种方式安装配置mysql数据库 一种采用无安装绿色版 一种采用官方提供的msi&#xff0c;windows安装版 亲测两种都可运行&#xff0c;有的电脑可能其中一种不能运行那可以尝试另外一种&#xff0c;有条件的同学可以试试docker版。 mysql安装 初次安装mysql之前建议大家…

代码随想录day18(2)二叉树:翻转二叉树(leetcode226)

题目要求&#xff1a;将一棵二叉树翻转 思路&#xff1a;若想要翻转二叉树&#xff0c;只需要用swap函数将左右孩子节点翻转即可。注意前序和后序遍历均可&#xff0c;但是对于中序来说会将某些结点的左右孩子翻转了两次&#xff08;画图很明显&#xff09;&#xff0c;硬要用…

工作总结!日志打印的11条建议

前言 大家好&#xff0c;我是 JavaPub。日志是我们定位问题的得力助手&#xff0c;也是我们团队间协作沟通&#xff08;甩锅&#xff09;、明确责任归属&#xff08;撕B&#xff09;的利器。没有日志的程序运行起来就如同脱缰的野&#x1f40e;。打印日志非常重要。今天我们来…

开发指南005-前端配置文件

平台要求无论前端还是后端&#xff0c;修改配置可以直接用记事本修改&#xff0c;无需重新打包或修改压缩包里文件。就前端而言&#xff0c;很多系统修改配置是在代码里修改&#xff0c;然后打包或者是修改编译环境来重新编译。 平台前端的配置文件为/static/js/下qlm_config.j…

家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型

家电5G智能制造工厂数字孪生可视化平台&#xff0c;推进家电工业数字化转型。随着科技的飞速发展&#xff0c;家电行业正迎来一场前所未有的数字化转型。在这场制造业数字化转型中&#xff0c;家电5G智能制造工厂数字孪生可视化平台扮演着至关重要的角色。本文将从数字孪生技术…

SwinTransformer论文笔记

What&#xff1a;Swin Transformer 用了移动窗口的层级式的Vision Transformer. Swin Transformer的思想是让Vision Transformer也能像CNN一样也能分成几个block&#xff0c;也能做层级式的特征提取&#xff0c;从而让提取的特征具有多尺度的概念。&#xff08;设计的初衷是作为…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…