返回

UE 4 C++教程:掌握两个相机视图的切换技巧

前端

前言

在游戏开发中,相机视图是玩家观察游戏世界的主要方式之一。不同的相机视图可以为玩家带来不同的游戏体验。例如,第一人称视角可以给玩家一种身临其境的感觉,而第三人称视角则可以帮助玩家更好地观察游戏中的角色和场景。

在本教程中,我们将学习如何在虚幻引擎 4 中使用 C++ 编程语言来创建和切换两个不同的相机视图。我们将创建一个名为 CameraDirector 的新角色,并使用这个角色来控制游戏中的相机视图。

步骤

  1. 创建一个名为 CameraDirector 的新角色

首先,我们需要创建一个名为 CameraDirector 的新角色。这个角色将负责控制游戏中的相机视图。

// 在 .h 文件中声明 CameraDirector 类

class ACameraDirector : public AActor
{
public:
    // 构造函数
    ACameraDirector();

    // 开始游戏时调用的函数
    void BeginPlay() override;

    // 每帧调用的函数
    void Tick(float DeltaTime) override;

private:
    // 相机视图 1 的名称
    FName CameraView1Name;

    // 相机视图 2 的名称
    FName CameraView2Name;

    // 当前活动相机视图的名称
    FName ActiveCameraViewName;

    // 相机视图 1 的引用
    ACameraActor* CameraView1;

    // 相机视图 2 的引用
    ACameraActor* CameraView2;

    // 切换相机视图的键位
    FKey SwitchCameraViewKey;
};
// 在 .cpp 文件中实现 CameraDirector 类

// 构造函数
ACameraDirector::ACameraDirector()
{
    // 设置相机视图 1 的名称
    CameraView1Name = "CameraView1";

    // 设置相机视图 2 的名称
    CameraView2Name = "CameraView2";

    // 设置当前活动相机视图的名称
    ActiveCameraViewName = CameraView1Name;

    // 设置切换相机视图的键位
    SwitchCameraViewKey = EKeys::SpaceBar;
}

// 开始游戏时调用的函数
void ACameraDirector::BeginPlay()
{
    Super::BeginPlay();

    // 获取相机视图 1 的引用
    CameraView1 = FindActorByName<ACameraActor>(CameraView1Name);

    // 获取相机视图 2 的引用
    CameraView2 = FindActorByName<ACameraActor>(CameraView2Name);

    // 设置相机视图 1 为当前活动相机视图
    SetCameraViewActive(CameraView1Name);
}

// 每帧调用的函数
void ACameraDirector::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    // 检查是否按下切换相机视图的键位
    if (IsKeyPressed(SwitchCameraViewKey))
    {
        // 切换相机视图
        SwitchCameraView();
    }
}

// 切换相机视图的函数
void ACameraDirector::SwitchCameraView()
{
    // 如果当前活动相机视图是相机视图 1,则将当前活动相机视图切换为相机视图 2
    if (ActiveCameraViewName == CameraView1Name)
    {
        SetCameraViewActive(CameraView2Name);
    }
    // 否则,将当前活动相机视图切换为相机视图 1
    else
    {
        SetCameraViewActive(CameraView1Name);
    }
}

// 设置相机视图为当前活动相机视图的函数
void ACameraDirector::SetCameraViewActive(FName CameraViewName)
{
    // 设置当前活动相机视图的名称
    ActiveCameraViewName = CameraViewName;

    // 找到当前活动相机视图的引用
    ACameraActor* CameraView = FindActorByName<ACameraActor>(CameraViewName);

    // 将当前活动相机视图设置为活动状态
    CameraView->SetActorHiddenInGame(false);

    // 将其他相机视图设置为非活动状态
    for (TActorIterator<ACameraActor> CameraIterator(GetWorld()); CameraIterator; ++CameraIterator)
    {
        if (CameraIterator->GetName() != CameraViewName)
        {
            CameraIterator->SetActorHiddenInGame(true);
        }
    }
}
  1. 创建两个相机视图

接下来,我们需要创建两个相机视图。这两个相机视图可以是不同的位置、角度或其他设置。

// 在关卡中创建相机视图 1

// 选择一个合适的位置和角度
// 将相机放置在场景中
// 将相机命名为 "CameraView1"

// 在关卡中创建相机视图 2

// 选择一个合适的位置和角度
// 将相机放置在场景中
// 将相机命名为 "CameraView2"
  1. 在 CameraDirector 角色中设置相机视图

在 CameraDirector 角色中,我们需要设置相机视图 1 和相机视图 2。

// 在 CameraDirector 角色的 .h 文件中添加以下成员变量

private:
    // 相机视图 1 的引用
    ACameraActor* CameraView1;

    // 相机视图 2 的引用
    ACameraActor* CameraView2;
// 在 CameraDirector 角色的 .cpp 文件中添加以下代码

// 在 BeginPlay() 函数中获取相机视图 1 和相机视图 2 的引用

// 获取相机视图 1 的引用
CameraView1 = FindActorByName<ACameraActor>(CameraView1Name);

// 获取相机视图 2 的引用
CameraView2 = FindActorByName<ACameraActor>(CameraView2Name);
  1. 在 CameraDirector 角色中切换相机视图

在 CameraDirector 角色中,我们需要实现一个切换相机视图的函数。这个函数可以在玩家按下某个键时被调用,从而切换当前活动相机视图。

// 在 CameraDirector 角色的 .h 文件中添加以下函数声明

public:
    // 切换相机视图的函数
    void SwitchCameraView();
// 在 CameraDirector 角色的 .cpp 文件中添加以下代码

// 实现 SwitchCameraView() 函数

void ACameraDirector::SwitchCameraView()
{
    // 如果当前活动相机视图是相机视图 1,则将当前活动相机视图切换为相机视图 2
    if (ActiveCameraViewName == CameraView1Name)
    {
        SetCameraViewActive(CameraView2Name);
    }
    // 否则,将当前活动相机视图切换为相机视图 1
    else
    {
        SetCameraViewActive(CameraView1Name);
    }
}
  1. 在 CameraDirector 角色中设置切换相机视图的键位

在 CameraDirector 角色中,我们需要设置切换相机视图的键位。这个键位可以在玩家按下时调用 SwitchCameraView() 函数,从而切换当前活动相机视图。

// 在 CameraDirector 角色的 .h 文件中添加以下成员变量

private:
    // 切换相机视图的键位
    FKey SwitchCameraViewKey;
// 在 CameraDirector 角色的 .cpp 文件中添加以下代码

// 在 BeginPlay() 函数中设置切换相机视图的键位

// 设置切换相机视图的键位
SwitchCameraViewKey = EKeys::SpaceBar;
  1. 在关卡中放置 CameraDirector 角色

最后,我们需要在关卡中放置 CameraDirector 角色。这个角色可以放置在任何位置,但它必须能够看到相机视图 1 和相机视图 2。

总结

在本教程中,我们学习了如何在虚幻引擎 4 中使用 C++ 编程语言来创建和切换两个不同的相机视图。通过使用 CameraDirector 角色,我们可以控制游戏中的相机视图,从而让玩家能够从不同的视角来观察游戏世界。