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
英文地址,請注明出處:http://en.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)三、其他…