六一的部落格


行百里者半九十




支持脱离头显的测试

两套输入:

头显使能时,使用VRPawn的输入(IMC_Default和IMC_Hands);

否则,使用第一人称射击输入。


在GI添加开发标志

新建Content/Blueprints文件夹


添加蓝图接口

  1. 在Blueprints下创建BPI_GameInstance

  2. 添加接口



添加GI

  1. 在Blueprints下创建GI_VRGame

  2. 添加布尔数据成员IsDevCodeAllowed,初始时置为true,打包时置为false


  3. 实现接口GetIsDevCodeAllowed



添加第一人称射击模板

  1. 添加内容包




创建PC并设置输入

在Blueprints下创建PC_MKControls,移除Tick节点。

  1. 头显

    VRPawn路径 Content/VRTemplate/Blueprints/VRPawn

    拷贝输入到头显分支。

  2. 第一人称射击(键鼠)

    • 新建 Content/Input 文件夹和 Content/Input/Actions 文件夹

    • 拷贝 Content/FirstPerson/Input/IMC_DefaultContent/Input ,重命名为IMC_MK



创建Character

  1. 拷贝VRPawn到 Content/Blueprints ,重命名为BP_VRCharacter

  2. 设置基类为Character

  3. 断掉IMC使能



在项目设置中设置全局game mode



在PC中实现第一人称射击输入

  1. 第一人称射击角色路径 Content/FirstPerson/Blueprints/BP_FirstPersonCharacter
  2. 拷贝第一人称射击角色的旋转和移动到PC_MKControls


此时已经可以使用W/A/S/D在场景中移动


将节点合并为函数SetMappingContext


将当前控制Pawn保存为变量



模拟手柄输入


操作汇总

  1. 移动Pawn

    W/A/S/D往前/左/后/右移动Pawn

  2. 旋转视角

    按下鼠标中键拖动鼠标实现视角上下左右旋转

  3. 模拟左手移动

    键位
    前后移动 LMB + 滑动鼠标中键
    上下/左右移动 LMB + 拖动鼠标

    LMB为LMoveChord

  4. 模拟左手旋转

    LMB + Left-Ctrl + 拖动鼠标

    LMB为LMoveChord,Left-Ctrl为LRotateChord

  5. 左手其他键位

    LTrigger LMB + Space
    LGrip LMB + Left-Shift
    LX LMB + Z
    LY LMB + X

    LMB为LMoveChord

  6. 模拟右手移动

    键位
    前后移动 RMB + 滑动鼠标中键
    上下/左右移动 RMB + 拖动鼠标

    RMB为RMoveChord

  7. 模拟右手旋转

    RMB + Left-Ctrl + 拖动鼠标

    RMB为RMoveChord,Left-Ctrl为RRotateChord

  8. 右手其他键位

    RTrigger RMB + Space
    RGrip RMB + Left-Shift
    RA RMB + Z
    RB RMB + X

    RMB为RMoveChord


拖动鼠标时,按下鼠标中键才旋转视角

  1. 新建InputAction,命名为IA_HeadChord

  2. 在IMC_MK添加,设置键位为鼠标中键


  3. 在IMC_MK中为IA_Look添加设置



操作左手


左手上下和左右移动

按下鼠标左键时拖动鼠标,操作左手上下和左右移动

  1. 新建InputAction,命名为IA_LMove和IA_LMoveChord

    其中IA_LMove为


  2. 添加到IMC_MK中


  3. 实现



左手前后移动

按下鼠标左键时滑动鼠标中键,操作左手前后移动

  1. 新建InputAction,命名为IA_LMoveFB


  2. 添加到IMC_MK中,要求鼠标左键也按下


  3. 实现



左手旋转

按下鼠标左键和Left-Control时拖动鼠标,旋转左手

  1. 新建InputAction,命名为IA_LRotate和IA_LRotateChord

    其中IA_LRotate为


  2. 添加到IMC_MK中

    注意,IA_LRotate和IA_LMove消耗的键位有部分相同,应先满足IA_LRotate,即IA_LRotate优先级高于IA_LMove,先匹配IA_LRotate


  3. 实现



其他键位触发

左手柄Trigger、Grip、X、Y触发。

  1. 创建InputAction,分别命名为IA_LX,IA_LY,IA_LTrigger,IA_LGrip

  2. 添加到IMC_MK中

    键位
    IA_LX Z + LMB
    IA_LY X + LMB
    IA_LTrigger Space + LMB
    IA_LGrip Left-Shift + LMB


  3. 在PC_MKControls中保存实现接口



操作右手


右手上下和左右移动

按下鼠标右键时拖动鼠标,操作右手上下和左右移动

  1. 新建InputAction,命名为IA_RMove和IA_RMoveChord

    其中IA_RMove的Value Type为 Axis2D(Vector2D)

  2. 添加到IMC_MK中


  3. 实现



右手前后移动

按下鼠标右键时滑动鼠标中键,操作右手前后移动

  1. 新建InputAction,命名为IA_RMoveFB

    ValueType为 Axis1D(float)

  2. 添加到IMC_MK中,要求鼠标右键也按下


  3. 实现



右手旋转

按下鼠标右键和Left-Control时拖动鼠标,旋转右手

  1. 新建InputAction,命名为IA_RRotate和IA_RRotateChord

    其中IA_RRotate的Value Type为 Axis2D(Vector2D)

  2. 添加到IMC_MK中

    同样,IA_RRotate在IA_RMove之上


  3. 实现



其他键位触发

右手柄Trigger、Grip、A、B触发

  1. 创建InputAction,分别命名为IA_LA,IA_LB,IARTrigger,IA_RGrip

  2. 添加到IMC_MK中

    键位
    IA_RA Z + RMB
    IA_RB X + RMB
    IA_RTrigger Space + RMB
    IA_RGrip Left-Shift + RMB


  3. 在PC_MKControls中保存实现接口



构建输入



支持脱离头显的测试

两套输入:

头显使能时,使用VRPawn的输入(IMC_Default和IMC_Hands);

否则,使用第一人称射击输入。


在GI添加开发标志

新建Content/Blueprints文件夹


添加蓝图接口

  1. 在Blueprints下创建BPI_GameInstance

  2. 添加接口



添加GI

  1. 在Blueprints下创建GI_VRGame

  2. 添加布尔数据成员IsDevCodeAllowed,初始时置为true,打包时置为false


  3. 实现接口GetIsDevCodeAllowed



添加第一人称射击模板

  1. 添加内容包




创建PC并设置输入

在Blueprints下创建PC_MKControls,移除Tick节点。

  1. 头显

    VRPawn路径 Content/VRTemplate/Blueprints/VRPawn

    拷贝输入到头显分支。

  2. 第一人称射击(键鼠)

    • 新建 Content/Input 文件夹和 Content/Input/Actions 文件夹

    • 拷贝 Content/FirstPerson/Input/IMC_DefaultContent/Input ,重命名为IMC_MK



创建Character

  1. 拷贝VRPawn到 Content/Blueprints ,重命名为BP_VRCharacter

  2. 设置基类为Character

  3. 断掉IMC使能



在项目设置中设置全局game mode



在PC中实现第一人称射击输入

  1. 第一人称射击角色路径 Content/FirstPerson/Blueprints/BP_FirstPersonCharacter
  2. 拷贝第一人称射击角色的旋转和移动到PC_MKControls


此时已经可以使用W/A/S/D在场景中移动


将节点合并为函数SetMappingContext


将当前控制Pawn保存为变量



模拟手柄输入


操作汇总

  1. 移动Pawn

    W/A/S/D往前/左/后/右移动Pawn

  2. 旋转视角

    按下鼠标中键拖动鼠标实现视角上下左右旋转

  3. 模拟左手移动

    键位
    前后移动 LMB + 滑动鼠标中键
    上下/左右移动 LMB + 拖动鼠标

    LMB为LMoveChord

  4. 模拟左手旋转

    LMB + Left-Ctrl + 拖动鼠标

    LMB为LMoveChord,Left-Ctrl为LRotateChord

  5. 左手其他键位

    LTrigger LMB + Space
    LGrip LMB + Left-Shift
    LX LMB + Z
    LY LMB + X

    LMB为LMoveChord

  6. 模拟右手移动

    键位
    前后移动 RMB + 滑动鼠标中键
    上下/左右移动 RMB + 拖动鼠标

    RMB为RMoveChord

  7. 模拟右手旋转

    RMB + Left-Ctrl + 拖动鼠标

    RMB为RMoveChord,Left-Ctrl为RRotateChord

  8. 右手其他键位

    RTrigger RMB + Space
    RGrip RMB + Left-Shift
    RA RMB + Z
    RB RMB + X

    RMB为RMoveChord


拖动鼠标时,按下鼠标中键才旋转视角

  1. 新建InputAction,命名为IA_HeadChord

  2. 在IMC_MK添加,设置键位为鼠标中键


  3. 在IMC_MK中为IA_Look添加设置



操作左手


左手上下和左右移动

按下鼠标左键时拖动鼠标,操作左手上下和左右移动

  1. 新建InputAction,命名为IA_LMove和IA_LMoveChord

    其中IA_LMove为


  2. 添加到IMC_MK中


  3. 实现



左手前后移动

按下鼠标左键时滑动鼠标中键,操作左手前后移动

  1. 新建InputAction,命名为IA_LMoveFB


  2. 添加到IMC_MK中,要求鼠标左键也按下


  3. 实现



左手旋转

按下鼠标左键和Left-Control时拖动鼠标,旋转左手

  1. 新建InputAction,命名为IA_LRotate和IA_LRotateChord

    其中IA_LRotate为


  2. 添加到IMC_MK中

    注意,IA_LRotate和IA_LMove消耗的键位有部分相同,应先满足IA_LRotate,即IA_LRotate优先级高于IA_LMove,先匹配IA_LRotate


  3. 实现



其他键位触发

左手柄Trigger、Grip、X、Y触发。

  1. 创建InputAction,分别命名为IA_LX,IA_LY,IA_LTrigger,IA_LGrip

  2. 添加到IMC_MK中

    键位
    IA_LX Z + LMB
    IA_LY X + LMB
    IA_LTrigger Space + LMB
    IA_LGrip Left-Shift + LMB


  3. 在PC_MKControls中保存实现接口



操作右手


右手上下和左右移动

按下鼠标右键时拖动鼠标,操作右手上下和左右移动

  1. 新建InputAction,命名为IA_RMove和IA_RMoveChord

    其中IA_RMove的Value Type为 Axis2D(Vector2D)

  2. 添加到IMC_MK中


  3. 实现



右手前后移动

按下鼠标右键时滑动鼠标中键,操作右手前后移动

  1. 新建InputAction,命名为IA_RMoveFB

    ValueType为 Axis1D(float)

  2. 添加到IMC_MK中,要求鼠标右键也按下


  3. 实现



右手旋转

按下鼠标右键和Left-Control时拖动鼠标,旋转右手

  1. 新建InputAction,命名为IA_RRotate和IA_RRotateChord

    其中IA_RRotate的Value Type为 Axis2D(Vector2D)

  2. 添加到IMC_MK中

    同样,IA_RRotate在IA_RMove之上


  3. 实现



其他键位触发

右手柄Trigger、Grip、A、B触发

  1. 创建InputAction,分别命名为IA_LA,IA_LB,IARTrigger,IA_RGrip

  2. 添加到IMC_MK中

    键位
    IA_RA Z + RMB
    IA_RB X + RMB
    IA_RTrigger Space + RMB
    IA_RGrip Left-Shift + RMB


  3. 在PC_MKControls中保存实现接口