🎯 目标:
✅ 理解 UE5 摄像机系统的核心概念
✅ 创建第一人称和第三人称摄像机
✅ 使用 C++ 绑定摄像机到角色
✅ 实现动态摄像机切换
1️⃣ Unreal Engine 5 摄像机系统概述
在 UE5 中,摄像机(Camera) 控制着玩家的视角。你可以使用 UCameraComponent 在 C++ 代码中 绑定摄像机到角色,并调整不同的视角模式:
视角 | 特点 | 适用场景 |
---|---|---|
第一人称(First-Person) | 视角跟随玩家眼睛 | FPS、驾驶、VR 游戏 |
第三人称(Third-Person) | 视角跟随玩家背后 | 动作冒险、RPG |
自由摄像机(Free Camera) | 可手动旋转和移动 | 电影模式、开发调试 |
UE5 允许我们在 C++ 代码 中绑定不同的摄像机组件,并动态切换视角。
2️⃣ 创建并绑定第一人称摄像机
🔹 修改 PlayerCharacter.h
📌 添加第一人称摄像机组件
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/SpringArmComponent.h"
#include "PlayerCharacter.generated.h"
UCLASS()
class MYGAME_API APlayerCharacter : public ACharacter
{
GENERATED_BODY()
public:
APlayerCharacter();
protected:
virtual void BeginPlay() override;
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
private:
void MoveForward(float Value);
void MoveRight(float Value);
void Turn(float Value);
void LookUp(float Value);
void ToggleCameraView();
UPROPERTY(VisibleAnywhere)
UCameraComponent* FirstPersonCamera;
UPROPERTY(VisibleAnywhere)
USpringArmComponent* ThirdPersonSpringArm;
UPROPERTY(VisibleAnywhere)
UCameraComponent* ThirdPersonCamera;
bool bIsFirstPersonView;
};
🔹 修改 PlayerCharacter.cpp
📌 初始化摄像机组件
#include "PlayerCharacter.h"
APlayerCharacter::APlayerCharacter()
{
PrimaryActorTick.bCanEverTick = true;
// 创建第一人称摄像机
FirstPersonCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
FirstPersonCamera->SetupAttachment(GetMesh(), "head"); // 绑定到角色头部
FirstPersonCamera->bUsePawnControlRotation = true;
// 创建第三人称摄像机臂
ThirdPersonSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("ThirdPersonSpringArm"));
ThirdPersonSpringArm->SetupAttachment(RootComponent);
ThirdPersonSpringArm->TargetArmLength = 300.0f;
ThirdPersonSpringArm->bUsePawnControlRotation = true;
// 创建第三人称摄像机
ThirdPersonCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("ThirdPersonCamera"));
ThirdPersonCamera->SetupAttachment(ThirdPersonSpringArm);
ThirdPersonCamera->bUsePawnControlRotation = false;
// 默认使用第三人称视角
bIsFirstPersonView = false;
ThirdPersonCamera->SetActive(true);
FirstPersonCamera->SetActive(false);
}
📌 绑定输入,实现摄像机切换
void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MoveForward", this, &APlayerCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &APlayerCharacter::MoveRight);
PlayerInputComponent->BindAxis("Turn", this, &APlayerCharacter::Turn);
PlayerInputComponent->BindAxis("LookUp", this, &APlayerCharacter::LookUp);
// 绑定摄像机切换
PlayerInputComponent->BindAction("ToggleCamera", IE_Pressed, this, &APlayerCharacter::ToggleCameraView);
}
void APlayerCharacter::ToggleCameraView()
{
bIsFirstPersonView = !bIsFirstPersonView;
if (bIsFirstPersonView)
{
FirstPersonCamera->SetActive(true);
ThirdPersonCamera->SetActive(false);
}
else
{
FirstPersonCamera->SetActive(false);
ThirdPersonCamera->SetActive(true);
}
}
3️⃣ 在 UE5 绑定输入
为了让 C 键切换视角,在 UE5 的“项目设置” → “输入” 中,添加 Action Mapping:
✅ 运行游戏,按 C 切换第一/第三人称视角!
4️⃣ 让摄像机更平滑
当玩家切换视角时,我们可以用 平滑插值(Interpolation) 来提高体验。
📌 修改 ToggleCameraView()
void APlayerCharacter::ToggleCameraView()
{
bIsFirstPersonView = !bIsFirstPersonView;
if (bIsFirstPersonView)
{
FirstPersonCamera->SetActive(true);
ThirdPersonCamera->SetActive(false);
FirstPersonCamera->SetFieldOfView(90.0f);
}
else
{
FirstPersonCamera->SetActive(false);
ThirdPersonCamera->SetActive(true);
// 平滑过渡摄像机 FOV
float TargetFOV = 110.0f;
ThirdPersonCamera->SetFieldOfView(FMath::FInterpTo(ThirdPersonCamera->FieldOfView, TargetFOV, GetWorld()->GetDeltaSeconds(), 5.0f));
}
}
✅ 这样切换时,视角会平滑过渡,而不会突兀切换!
5️⃣ 让摄像机跟随玩家旋转
在 第三人称模式 下,我们可以让 SpringArm 跟随玩家:
void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MoveForward", this, &APlayerCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &APlayerCharacter::MoveRight);
PlayerInputComponent->BindAxis("Turn", this, &APlayerCharacter::Turn);
PlayerInputComponent->BindAxis("LookUp", this, &APlayerCharacter::LookUp);
ThirdPersonSpringArm->bUsePawnControlRotation = true; // 让摄像机跟随玩家旋转
}
✅ 现在,摄像机可以平滑跟随玩家旋转!
6️⃣ 常见问题 & 解决方案
问题 | 解决方案 |
---|---|
摄像机没有切换 | 确保 FirstPersonCamera->SetActive(true/false) 正确调用 |
视角不对 | 确保 FirstPersonCamera 附加在 Mesh(头部),ThirdPersonCamera 附加在 SpringArm |
摄像机过近 | 调整 SpringArm->TargetArmLength |
鼠标无法旋转视角 | bUsePawnControlRotation = true 需在 SpringArm 上启用 |
🎯 总结
✅ 理解 UE5 摄像机系统
✅ 在 C++ 中创建第一人称 & 第三人称摄像机
✅ 使用 SpringArm 让摄像机平滑移动
✅ 绑定 C 键切换摄像机视角
🎮 明天我们将深入了解 UE5 碰撞系统,让角色与环境交互! 🚀