“奇怪,這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,要記得勾選(默認應該是不勾選的把)