移动与视角框架
1.UEC++实现第三人称角色移动 + 视角框架
层级组件:
ASCharacter(继承ACharacter,自带胶囊体 + 骨骼网络 + 移动组件)
RootComponent = CapsuleComponent(胶囊体,ACharacter自动创建)
SpringArmComp 弹簧臂(挂载到胶囊体)
Camera 摄像机(挂载到弹簧臂)
1 | SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp")); |
弹簧臂的作用:当摄像机被墙挡住时能自动缩短
2.三个旋转开关
整个框架的核心,三个bool各管一件事情:
| 变量 | 当前值 | 职责 |
|---|---|---|
| SpringArmComp->bUsePawnControlRotation | true | 弹簧臂跟随”控制器旋转” → 鼠标上下/左右转动视角 |
| GetCharacterMovement()->bOrientRotationToMovement | true | 角色身体自动转向移动方向(脸朝走的方向) |
| bUseControllerRotationYaw | false | 角色身体不直接跟鼠标偏航转(防止”歪脖子/僵硬转”) |
| 三者配合后的效果: |
鼠标转动 → 只改变视角(弹簧臂跟着转)
角色移动 → 身体自动转向移动方向(面向走的方向)
视角与身体朝向互不干扰 → 第三人称标准手感
3.输入绑定(4个轴)
1 | PlayerInputComponent->BindAxis("MoveForward", this, &ASCharacter::MoveForward); // W/S |
4.移动方向计算(相对计算机)
1 | void ASCharacter::MoveForward(float Value) |
要点:
ControlRot.Vector() = 视角的前方向(Forward,X 轴)
FRotationMatrix(ControlRot).GetUnitAxis(EAxis::Y) = 视角的右方向(Y 轴)
清零 Pitch 后,移动方向始终平行于地面,不会钻地/飞天
本文从 LearnByCompany 原始文档 自动同步。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 岁迹!
