构建输入
2025年5月13日 2025年5月14日
支持脱离头显的测试
两套输入:
头显使能时,使用VRPawn的输入(IMC_Default和IMC_Hands);
否则,使用第一人称射击输入。
在GI添加开发标志
新建Content/Blueprints文件夹
添加蓝图接口
-
在Blueprints下创建BPI_GameInstance
-
添加接口
添加GI
-
在Blueprints下创建GI_VRGame
-
添加布尔数据成员IsDevCodeAllowed,初始时置为true,打包时置为false
-
实现接口GetIsDevCodeAllowed
添加第一人称射击模板
-
添加内容包
创建PC并设置输入
在Blueprints下创建PC_MKControls,移除Tick节点。
-
头显
VRPawn路径Content/VRTemplate/Blueprints/VRPawn
拷贝输入到头显分支。
-
第一人称射击(键鼠)
-
新建
Content/Input
文件夹和Content/Input/Actions
文件夹 -
拷贝
Content/FirstPerson/Input/IMC_Default
到Content/Input
,重命名为IMC_MK
-
创建Character
-
拷贝VRPawn到
Content/Blueprints
,重命名为BP_VRCharacter -
设置基类为Character
-
断掉IMC使能
在项目设置中设置全局game mode
在PC中实现第一人称射击输入
- 第一人称射击角色路径
Content/FirstPerson/Blueprints/BP_FirstPersonCharacter
- 拷贝第一人称射击角色的旋转和移动到PC_MKControls
此时已经可以使用W/A/S/D在场景中移动
将节点合并为函数SetMappingContext
将当前控制Pawn保存为变量
模拟手柄输入
操作汇总
-
移动Pawn
W/A/S/D往前/左/后/右移动Pawn -
旋转视角
按下鼠标中键拖动鼠标实现视角上下左右旋转 -
模拟左手移动
键位 前后移动 LMB + 滑动鼠标中键 上下/左右移动 LMB + 拖动鼠标 LMB为LMoveChord
-
模拟左手旋转
LMB + Left-Ctrl + 拖动鼠标LMB为LMoveChord,Left-Ctrl为LRotateChord
-
左手其他键位
LTrigger LMB + Space LGrip LMB + Left-Shift LX LMB + Z LY LMB + X LMB为LMoveChord
-
模拟右手移动
键位 前后移动 RMB + 滑动鼠标中键 上下/左右移动 RMB + 拖动鼠标 RMB为RMoveChord
-
模拟右手旋转
RMB + Left-Ctrl + 拖动鼠标RMB为RMoveChord,Left-Ctrl为RRotateChord
-
右手其他键位
RTrigger RMB + Space RGrip RMB + Left-Shift RA RMB + Z RB RMB + X RMB为RMoveChord
拖动鼠标时,按下鼠标中键才旋转视角
-
新建InputAction,命名为IA_HeadChord
-
在IMC_MK添加,设置键位为鼠标中键
-
在IMC_MK中为IA_Look添加设置
操作左手
左手上下和左右移动
按下鼠标左键时拖动鼠标,操作左手上下和左右移动
-
新建InputAction,命名为IA_LMove和IA_LMoveChord
其中IA_LMove为 -
添加到IMC_MK中
-
实现
左手前后移动
按下鼠标左键时滑动鼠标中键,操作左手前后移动
-
新建InputAction,命名为IA_LMoveFB
-
添加到IMC_MK中,要求鼠标左键也按下
-
实现
左手旋转
按下鼠标左键和Left-Control时拖动鼠标,旋转左手
-
新建InputAction,命名为IA_LRotate和IA_LRotateChord
其中IA_LRotate为 -
添加到IMC_MK中
注意,IA_LRotate和IA_LMove消耗的键位有部分相同,应先满足IA_LRotate,即IA_LRotate优先级高于IA_LMove,先匹配IA_LRotate -
实现
其他键位触发
左手柄Trigger、Grip、X、Y触发。
-
创建InputAction,分别命名为IA_LX,IA_LY,IA_LTrigger,IA_LGrip
-
添加到IMC_MK中
键位 IA_LX Z + LMB IA_LY X + LMB IA_LTrigger Space + LMB IA_LGrip Left-Shift + LMB -
在PC_MKControls中保存实现接口
操作右手
右手上下和左右移动
按下鼠标右键时拖动鼠标,操作右手上下和左右移动
-
新建InputAction,命名为IA_RMove和IA_RMoveChord
其中IA_RMove的Value Type为Axis2D(Vector2D)
-
添加到IMC_MK中
-
实现
右手前后移动
按下鼠标右键时滑动鼠标中键,操作右手前后移动
-
新建InputAction,命名为IA_RMoveFB
ValueType为Axis1D(float)
-
添加到IMC_MK中,要求鼠标右键也按下
-
实现
右手旋转
按下鼠标右键和Left-Control时拖动鼠标,旋转右手
-
新建InputAction,命名为IA_RRotate和IA_RRotateChord
其中IA_RRotate的Value Type为Axis2D(Vector2D)
-
添加到IMC_MK中
同样,IA_RRotate在IA_RMove之上 -
实现
其他键位触发
右手柄Trigger、Grip、A、B触发
-
创建InputAction,分别命名为IA_LA,IA_LB,IARTrigger,IA_RGrip
-
添加到IMC_MK中
键位 IA_RA Z + RMB IA_RB X + RMB IA_RTrigger Space + RMB IA_RGrip Left-Shift + RMB -
在PC_MKControls中保存实现接口