第 8 天:摄像机系统全解析,打造第一/第三人称视角!

🎯 目标:

理解 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 碰撞系统,让角色与环境交互! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bluesonli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值