角色移动功能的实现

理解六自由度

六自由度(Six Degrees of Freedom,6DoF)是指一个物体在三维空间中的独立运动方式,共有六个自由度。

这些自由度分为三种平移运动和三种旋转运动。

三种平移运动(Translational Motion)

  1. 前后(X轴)
    • 物体可以沿X轴移动,通常称为“前后”或“左右”移动。
  2. 左右(Y轴)
    • 物体可以沿Y轴移动,通常称为“左右”或“侧向”移动。
  3. 上下(Z轴)
    • 物体可以沿Z轴移动,通常称为“上下”移动。

三种旋转运动(Rotational Motion)

  1. Yaw(偏航,绕Z轴旋转)
    • 物体绕垂直轴旋转,类似于站在地面上原地转圈。
  2. Pitch(俯仰,绕Y轴旋转)
    • 物体绕水平侧轴旋转,类似于点头或仰头的动作。
  3. Roll(滚转,绕X轴旋转)
    • 物体绕前后轴旋转,类似于左右倾斜身体。

六自由度的实际应用

  • 虚拟现实(VR)和增强现实(AR):用户头部和手部的运动通常需要六自由度,以便在虚拟环境中自由移动和互动。
  • 机器人和机械臂:为了在三维空间中灵活操作,机器人通常需要六自由度。
  • 飞行模拟:飞行器在三维空间中运动时需要六自由度,以模拟真实的飞行体验。
  • 计算机图形学和动画:3D对象的平移和旋转需要六自由度,以实现逼真的动画和交互效果。

示意图

image-20240603143528741

实现角色前进后退、左移右移

蓝图实现

解析:

  1. 获取 MoveForward 输入轴和 MoveRight 输入轴这两个输入节点,用于获取玩家输入。

    MoveForward 输入轴的值的范围是 [-1, 1],正值表示前进,负值表示后退。

    MoveRight 输入轴也是一样,范围是 [-1, 1],正值表示右移,负值表示左移。

  2. 执行 Add Movement Input 函数节点,即添加移动输入,这是引擎提供的函数,直接调用。

  3. 获取控制旋转(Get Control Rotation

    控制旋转代表了角色的视角方向。通过获取控制旋转,可以确保角色的移动方向与玩家的视角一致。例如,当玩家向前移动时,角色会朝向玩家当前的视角方向移动。

  4. 拆分和重建旋转(Break Rotator and Make Rotator

    将控制旋转拆分为 Roll、Pitch 和 Yaw 分量,是为了让角色在平面上移动,我们只关心 Yaw(水平旋转)。因此,将 Pitch 和 Roll 设为 0,保留 Yaw,重建一个新的旋转值。这样可以确保角色在前进和移动时仅在水平面上进行。

  5. 获取向前和向右的向量(Get Forward Vector and Get Right Vector

    使用重新构建的旋转值,分别获取前向向量和右向向量

  6. 将向量值赋值给 World Direction

实现角色视角自由旋转

蓝图实现

解析:

  1. 获取 Turn 输入轴和 LookUp 输入轴这两个输入节点,用于获取玩家的鼠标输入。

    Turn 用于处理水平旋转(Yaw),它会捕捉水平输入轴的值(例如鼠标左右移动或手柄左/右摇杆的输入),轴值为正时,表示向右转;轴值为负时,表示向左转。

    LookUp 用于处理垂直旋转(Pitch),它会捕捉垂直输入轴的值(例如鼠标上下移动或手柄上/下摇杆的输入),轴值为正时,表示向上看;轴值为负时,表示向下看。

  2. 分别调用 Add Controller Yaw InputAdd Controller Pitch Input 函数。

    Add Controller Yaw Input 函数将输入轴的值应用到控制器的 Yaw 输入上,控制角色的水平旋转。

    Add Controller Pitch Input 函数将输入轴的值应用到控制器的 Pitch 输入上,控制角色的垂直旋转。

此时,在角色默认设置中的 Pawn 设置里,使用控制器旋转Yaw 这个选项是默认打勾的。

使用控制器旋转Yaw默认打勾

鼠标输入的值会应用到控制器中,控制器就有了 Yaw 和 Pitch 值,这里的默认设置了 使用控制器旋转Yaw ,那么当我们直接运行游戏时,玩家可以通过鼠标水平旋转来控制角色的水平旋转。

不过会发现不能垂直旋转,也就是视角不能上下看,这样应为没有应用 Pitch。下面就设置 SpringArm(弹簧臂),将 Pitch 值应用到弹簧臂上。

设置使用 Pawn 控制旋转

现在就可以自由旋转角色视角了。

取消角色跟随摄像机旋转,设置角色按照所按方向键进行旋转

可能有的朋友想让角色能够根据玩家输入的方向键来进行正面的移动,这样说可能不是很明白。

因为目前是能正常前进后退,左移右移,视角左右看,上看下看。但是都是角色的背部面对着玩家,角色永远跟着摄像机的旋转而进行旋转。那么如何让角色不跟随摄像机旋转而旋转呢?

这个我们之前就知道,角色之所以旋转,是因为它默认设置了 使用控制器旋转Yaw,此时我们取消这个选项的勾选,编译运行,角色就不会跟随摄像机的旋转而旋转了。

那么角色现在不会根据摄像机旋转,那么如何让他按照我们按方向键的方向进行旋转呢? 不这样的话,角色永远不会旋转了呀。是的,这个也简单,我们直接选择 CharacterMovement 这个组件,设置里面的 将旋转朝向运动 为 true,即勾选上这个选项。这样就能让角色按照我们所按下的方向键的方向进行旋转了。

勾上 将旋转朝向运动


角色移动功能的实现
https://god23bin.github.io/unreal-engine-blog/2024/06/03/unreal-engine/游戏功能实现/角色移动功能的实现/
作者
god23bin
发布于
2024年6月3日
许可协议