UE5 第三人称视角如何设置camera移动旋转

“奇怪,这blog不支持md格式吗”

## 第1步:设置玩家Pawn
创建一个蓝图类,继承自 Pawn,在游戏模式(Game Mode)中,将这个Pawn设置为默认
在组件面板中,添加一个 Spring Arm 组件
在组件面板中,添加一个 Camera 组件,并将它拖拽到 Spring Arm 组件上,使其成为子级

## 第2步:设置增强输入(Enhanced Input)

    创建输入动作 (Input Action)
在内容浏览器中右键 -> 输入 -> 输入动作(Input Action)。
命名为 IA_Zoom。
打开它,将 Value Type 设置为 Axis1D (float)。这表示它会提供一个浮点数值。
创建输入映射上下文 (Input Mapping Context)
在内容浏览器中右键 -> 输入 -> 输入映射上下文(Input Mapping Context)。
命名为 IMC_Default。
打开它,点击 Mappings 旁边的 + 号。
在新增的条目中,选择我们刚刚创建的 IA_Zoom。
点击旁边的小键盘图标,在搜索框中输入 Mouse Wheel,选择 Mouse Wheel Axis。
将IMC应用到玩家
打开玩家控制器(Player Controller)蓝图,或者如果你没有自定义的,可以在Pawn蓝图的 BeginPlay 事件中完成。
在 Event BeginPlay 事件后,添加以下节点,将 IMC_Default 应用到玩家身上。

## 第3步:在Pawn蓝图中实现缩放逻辑(拉近拉远视角)

    打开Pawn蓝图的事件图表。
创建三个浮点型变量来控制缩放:
ZoomSpeed (缩放速度,例如:50.0)
MinZoomLength (最小臂长,例如:300.0)
MaxZoomLength (最大臂长,例如:2000.0)
将它们设置为“可编辑实例”,这样就可以在编辑器里直接调整。
在事件图表中右键,搜索并添加 IA_Zoom 事件节点。
实现以下蓝图逻辑:

    逻辑分解:
IA_Zoom (Triggered): 当鼠标滚轮滚动时,这个事件会被触发。
Action Value: 这是鼠标滚轮的值。向上滚动是 1.0,向下是 -1.0。
Get Spring Arm: 获取我们要控制的弹簧臂组件。
Get Target Arm Length: 获取当前弹簧臂的长度。
乘法 (float): Action Value * ZoomSpeed 计算出本次滚动应该改变多少长度。
减法 (float): 当前长度 - 改变的长度。我们用减法是因为向上滚动(值为正)时,我们希望臂长变短(拉近镜头)。
Clamp (float): 这是关键!它会将计算出的新长度限制在 MinZoomLength 和 MaxZoomLength 之间,确保不会超出范围。
Set Target Arm Length: 将最终被限制过的值设置回弹簧臂,完成缩放。


## 第4步:创建新的输入动作 IA_Move(水平移动)
1. 在内容浏览器中,右键 -> 输入 (Input) -> 输入动作 (Input Action)。
2. 命名为 IA_Move。
3. 双击打开它,在 Details 面板中,将 Value Type 设置为 Axis2D (Vector 2D)。这表示它会同时处理两个方向的输入(X轴和Y轴)。

## 第5步:更新输入映射上下文 IMC_Default
1. 打开之前创建的 IMC_Default 文件。
2. 在 Mappings 列表中,点击 + 号添加一个新的映射。
3. 在新增的条目中,选择我们刚刚创建的 IA_Move。
4. 现在,我们需要为 IA_Move 添加四个按键映射:W, S, A, D。
添加 'W' 键 (向前):
点击 IA_Move 旁边的小 + 号,添加一个按键。
选择键盘图标,搜索并选择 W 键。
在 W 键的设置中,添加一个 Modifier -> Swizzle Input Axis Values。这个修饰符可以将一维的按键输入(按下/松开)转换到二维向量的特定轴上。默认情况下,它会映射到Y轴,这正是我们想要的(在UE中,Y轴通常代表“前进”方向)。
添加 'S' 键 (向后):
再次为 IA_Move 添加一个按键,选择 S 键。
为 S 键添加一个 Modifier -> Negate。这会将输入值取反(从 1.0 变为 -1.0),实现向后移动。
再为 S 键添加第二个 Modifier -> Swizzle Input Axis Values。确保Negate在Swizzle之上,这样是先取反再映射到Y轴。
添加 'D' 键 (向右):
为 IA_Move 添加一个按键,选择 D 键。
D 键默认就会映射到X轴的正方向,所以它不需要任何Modifier。
添加 'A' 键 (向左):
为 IA_Move 添加一个按键,选择 A 键。
为 A 键添加一个 Modifier -> Negate。这会将X轴的输入值取反,实现向左移动。


## 第6步:在Pawn蓝图中实现移动逻辑
现在我们回到Pawn蓝图的 事件图表 (Event Graph)。
1. 创建移动速度变量:
在 My Blueprint 面板中,创建一个新的浮点型变量,命名为 MoveSpeed。
编译蓝图后,给它一个默认值,比如 1000.0。
2. 添加 IA_Move 事件节点:
在事件图表的空白处右键,搜索并添加 IA_Move 事件节点。
注意:这个事件会在按键被按住期间持续触发 (Triggered),这正是我们想要的平滑移动效果。
3. 实现移动蓝图逻辑:
我们需要在每一帧(Tick)都根据输入来移动Pawn,所以最好将移动逻辑放在 Event Tick 中,并通过 IA_Move 事件来更新一个代表移动方向的变量。
创建一个新变量: 在 My Blueprint 面板中,创建一个 Vector 2D 类型的变量,命名为 MoveInput。这个变量将存储 W/A/S/D 的输入状态。
逻辑A: 更新 MoveInput 变量
从 IA_Move 的 Triggered 执行引脚连接到一个 Set MoveInput 节点,将 Action Value (这是一个Vector 2D) 存入我们的变量。
从 IA_Move 的 Completed 执行引脚(当所有相关按键都松开时触发)也连接到一个 Set MoveInput 节点,但这次将值设置为 (0, 0),以停止移动。


逻辑B: 在 Event Tick 中执行移动
找到 Event Tick 节点。
从 Event Tick 拖出,添加 Add Actor World Offset 节点。这个节点可以直接移动Actor,并且会自动处理碰撞(如果开启了碰撞)。
接下来是关键:计算每帧的移动偏移量 (Delta Location)。
计算偏移量的详细步骤:
1. Get MoveInput: 获取我们存储的二维移动输入。
2. Get Control Rotation: 获取玩家控制器的旋转。这代表了玩家的视角方向。我们只关心水平旋转(Yaw)。
3. Break Rotator: 将旋转分解为 Roll, Pitch, Yaw。
4. Make Rotator: 只使用 Yaw 值,重新创建一个只包含水平旋转的 Rotator。这确保我们移动时不会因为相机俯仰而向上或向下飞。
5. Get Forward Vector: 从这个纯水平的旋转中获取“前”方向向量。
6. Get Right Vector: 从这个纯水平的旋转中获取“右”方向向量。
7. 拆分 MoveInput: 使用 Break Vector 2D 节点,将 MoveInput 分为 X 和 Y。
8. 计算最终方向:
§ Forward Vector * MoveInput.Y -> 计算前后方向的移动分量。
§ Right Vector * MoveInput.X -> 计算左右方向的移动分量。
§ 将这两个向量相加,得到最终的移动方向向量。
9. 标准化 (Normalize): 对合成的方向向量进行标准化,确保斜向移动的速度和直线移动的速度一致。
10. 乘以速度和时间:
§ 将标准化后的方向向量乘以 MoveSpeed。
§ 再乘以 Event Tick 提供的 Delta Seconds。这确保移动速度与帧率无关,在任何电脑上都一样快。(我的demo中没用此步骤)
11. 连接到 Add Actor World Offset: 将最终计算出的偏移量连接到 Delta Location 引脚。


## 第7步:创建新的输入动作
1. 创建 IA_Look (用于鼠标移动)
在内容浏览器中,右键 -> 输入 (Input) -> 输入动作 (Input Action)。
命名为 IA_Look。
打开它,将 Value Type 设置为 Axis2D (Vector 2D)。
2. 创建 IA_RotateCamera (用于鼠标右键)
再次创建一个新的输入动作。
命名为 IA_RotateCamera。
这个动作使用默认的 Value Type Digital (bool) 即可,因为它只关心按下(true)和松开(false)。

## 第8步:更新输入映射上下文 IMC_Default
1. 打开IMC_Default 文件。
2. 添加 IA_RotateCamera 映射:
点击 Mappings 列表旁的 + 号,添加一个新映射。
选择 IA_RotateCamera。
点击键盘图标,选择 Right Mouse Button。
3. 添加 IA_Look 映射 (关键步骤):
再次点击 + 号,添加另一个新映射。
选择 IA_Look。
点击键盘图标,搜索并选择 Mouse XY 2D-Axis。这个代表鼠标在X和Y轴上的移动。
最重要的部分:为这个映射添加一个 触发器 (Trigger)。
在 IA_Look 映射条目的 Triggers 数组旁,点击 + 号。
在下拉菜单中选择 Chorded Action。
Chorded Action 触发器的作用是:只有当另一个指定的动作(Chord Action)被触发时,当前这个动作(在这里是IA_Look)才会被激活。
在 Chorded Action 的设置中,将 Chord Action 属性设置为我们刚刚创建的 IA_RotateCamera。
这个设置意味着:只有当 IA_RotateCamera(即鼠标右键)被按住时,IA_Look(鼠标移动)的输入才会被发送到我们的蓝图。这完美地实现了“按住右键移动鼠标才旋转”的需求。

## 第9步:在Pawn蓝图中仅实现水平旋转逻辑

    1. 添加 IA_Look 事件节点:
○ 在事件图表的空白处右键,搜索并添加 IA_Look 事件节点。
2. 实现旋转蓝图逻辑:
○ 从 IA_Look 事件节点的 Action Value (这是一个Vector 2D) 拖出一条线。
○ 使用 Break Vector 2D 节点来分离出X和Y的值。
○ 我们只关心 X 值,因为它代表鼠标的水平移动。
○ 将 X 值乘以 LookSpeed 变量,以控制旋转速度。
○ 将最终的结果连接到 Add Controller Yaw Input 节点的 Val 输入引脚。


注意:
Pawn蓝图, 在右侧的 Details 面板中,搜索 Use Controller Rotation Yaw,要记得勾选(默认应该是不勾选的把)

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

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

相关文章

OpenCV 入门教程:开启计算机视觉之旅

目录 一、引言​ 二、OpenCV 简介 ​(一)什么是 OpenCV (二)OpenCV 的特点与优势 (三)OpenCV 的应用领域 三、环境搭建 (一)安装 OpenCV 库​ 四、OpenCV 基础操作 &#xf…

C++高频知识点(十九)

文章目录91. TCP断开连接的时候为什么必须4次而不是3次?92. 为什么要区分用户态和内核态?93. 说说编写socket套接字的步骤1. 服务器端编写步骤1.1 创建套接字1.2 绑定套接字1.3 监听连接1.4 接受连接1.5 数据传输1.6 关闭套接字2. 客户端编写步骤2.1 创建…

一个基于 epoll 实现的多路复用 TCP 服务器程序,相比 select 和 poll 具有更高的效率

/*5 - 使用epoll实现多路复用 */ #include <stdio.h> // 标准输入输出函数库 #include <stdlib.h> // 标准库函数&#xff0c;包含exit等 #include <string.h> // 字符串处理函数 #include <unistd.h> // Unix标准函…

元数据管理与数据治理平台:Apache Atlas 通知和业务元数据 Notifications And Business Metadata

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。Apache Atlas 框架是一套可扩展的核心基础治理服务&#xff0c;使企业能够有效、高效地满足 Hadoop 中的合规性要求&#xff0c;并支持与整个企…

rem:CSS中的相对长度单位

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

【10】C#实战篇——C# 调用 C++ dll(C++ 导出函数、C++导出类)

文章目录1 导出C 类函数 、导出 C函数1.1 .h文件1.2 .cpp 文件1.3 C# 调用2 C与C#数据类型对应3 保姆级教程&#xff08;项目搭建、代码、调用&#xff0c;图文并茂&#xff09;1 导出C 类函数 、导出 C函数 C 生成动态库.dll 详细教程&#xff1a; C 生成动态库.dll 及 C调用…

Flutter 与 Android NDK 集成实战:实现高性能原生功能

Flutter 与 NDK 集成实现 Flutter 可以通过 Platform Channels 与原生代码&#xff08;包括使用 NDK 编写的 C/C 代码&#xff09;进行交互。以下是实现 Flutter 与 NDK 集成的步骤&#xff1a; 基本步骤 1. 创建 Flutter 项目 flutter create flutter_ndk_example cd flutter_…

elementui cascader 远程加载请求使用 选择单项等

背景&#xff1a;小程序与后端使用自定义表单渲染视图。发现若没有全选&#xff08;如&#xff1a;省市县全部选择&#xff0c;指定的市3级&#xff09;在pc端就会无法渲染出已经选择的区县名称。 解决方案&#xff1a;参考官方文档&#xff0c;设置属性可独立勾选element ui c…

Unity WebGL打包后启动方法,本地方法

引言&#xff1a;常见WebGL开启方法常需要重新打包点击Build and Run或者将游戏放到Unity的云服务器上&#xff0c;作为开发者而言这两个方案一个为了开启再次打包&#xff0c;另一个直接放到了公开环境都不太合适。所以我们需要一个能在本地开启测试的WebGL的方法。 解决方案 …

安全引导功能及ATF的启动过程(五)

安全引导功能及ATF的启动过程&#xff08;五&#xff09; ATF中bl32的启动 bl31中的runtime_svc_init函数会初始化OP-TEE对应的服务&#xff0c;通过调用该服务项的初始化函数来完成OP-TEE的启动。对于OP-TEE的服务项会通过DECLARE_RT_SVC宏在编译时被存放到rt_svc_des段中。该…

Numpy科学计算与数据分析:Numpy入门之多平台安装与基础环境配置

Numpy环境搭建与基础操作 学习目标 本课程将指导学员在Windows、macOS和Linux三种操作系统上安装Numpy&#xff0c;并配置开发环境&#xff0c;包括使用Jupyter Notebook和Spyder等IDE的基本操作。通过本课程的学习&#xff0c;学员将能够独立搭建Numpy开发环境&#xff0c;并…

内存溢出的原因有哪些,如何排查线上问题?

1. java.lang.OutOfMemoryError: ......java heap space..... 堆栈溢出&#xff0c;代码问题的可能性极大 2. java.lang.OutOfMemoryError: GC over head limit exceeded 系统处于高频的GC状态&#xff0c;而且回收的效果依然 不佳的情况&#xff0c;就会开始报这个错误&…

Cesium 无人机视角飞行漫游,截屏

1.实现Cesium模拟无人机离屏渲染&#xff0c;无人机视角飞行漫游。视锥体显示 具体效果如下地址&#xff1a; 【CESIUM无人机视角飞行截屏】 https://www.bilibili.com/video/BV1zQ89zGE14/?share_sourcecopy_web&vd_source8239ec37df07d6a5d56c9ece00146783

vscode 打开设置

目录 方法 1&#xff08;快捷键&#xff09;&#xff1a; 方法2&#xff0c;界面操作&#xff0c;有时没有 方法 1&#xff08;快捷键&#xff09;&#xff1a; 按下&#xff1a;Cmd Shift P 输入并选择&#xff1a;Preferences: Open Settings (JSON) 方法2&#xff0c;…

繁花深处:花店建设的时代意义与多元应用—仙盟创梦IDE

花店当第一缕晨光透过花店的玻璃窗&#xff0c;落在带着露水的玫瑰花瓣上时&#xff0c;这个空间便不再只是商品交易的场所。花店作为城市肌理中充满生命力的细胞&#xff0c;承载着远比销售鲜花更丰富的社会意义。在快节奏的现代生活中&#xff0c;一束鲜花的绽放不仅是自然之…

AtomicStampedReference解决方案

1、通过引入版本戳(stamp)机制解决ABA问题&#xff1a; 每次修改时递增版本号执行CAS时同时检查值和版本号即使值相同但版本不同&#xff0c;操作也会失败2、具体代码实现 import java.util.concurrent.atomic.AtomicStampedReference;public class AtomicStampedReferenceDemo…

版本控制的详细说明介绍(已有github账号版)

说明 如果已经有一个GitHub账号,这是一个很好的起点!版本控制是一个帮助你管理代码或其他文件变化的工具,就像给你的项目加了一个“时间机器”,可以随时回溯历史、协作编辑,而不会乱套。下面我将从基础开始,层层展开说明。整个内容分为几个部分:介绍、原理、用途、操作…

基于Github Pages搭建个人博客站点:hexo环境搭建、本地预览与发布

步骤确认 Hexo 博客的源文件在哪里安装 Hexo 命令行工具&#xff1a;npm install -g hexo-cli在源文件目录中使用 hexo new "文章标题" 创建新文章编辑生成的 Markdown 文件使用 hexo generate 生成静态文件使用 hexo deploy 部署到这个 GitHub Pages 仓库设置Hexo博…

Shell脚本实现自动封禁恶意扫描IP

iptables 简介我们使用iptables工具实现功能iptables 是 Linux 系统上最常用的防火墙工具&#xff0c;可以指定策略。Shell文件创建首先我们先创建文件scanners.shvim /usr/local/bin/auto_block_ip.sh我的目标是每10分钟自动扫描&#xff0c;再10分钟内一个IP访问50次以上就就…

LeetCode_哈希表

哈希表&#xff08;散列表&#xff09;一、哈希表二、有效的字母异位词1、有效的字母异位词(力扣242)2、赎金信(力扣383)3、字母异位词分组(力扣49)4、找到字符串中所有字母异位词(力扣438)三、两个数组的交集1、两个数组的交集(力扣349)2、两个数组的交集 II(力扣350)三、其他…