返回
UE 4 C++教程:掌握两个相机视图的切换技巧
前端
2024-01-09 04:46:07
前言
在游戏开发中,相机视图是玩家观察游戏世界的主要方式之一。不同的相机视图可以为玩家带来不同的游戏体验。例如,第一人称视角可以给玩家一种身临其境的感觉,而第三人称视角则可以帮助玩家更好地观察游戏中的角色和场景。
在本教程中,我们将学习如何在虚幻引擎 4 中使用 C++ 编程语言来创建和切换两个不同的相机视图。我们将创建一个名为 CameraDirector 的新角色,并使用这个角色来控制游戏中的相机视图。
步骤
- 创建一个名为 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
// 选择一个合适的位置和角度
// 将相机放置在场景中
// 将相机命名为 "CameraView1"
// 在关卡中创建相机视图 2
// 选择一个合适的位置和角度
// 将相机放置在场景中
// 将相机命名为 "CameraView2"
- 在 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);
- 在 CameraDirector 角色中切换相机视图
在 CameraDirector 角色中,我们需要实现一个切换相机视图的函数。这个函数可以在玩家按下某个键时被调用,从而切换当前活动相机视图。
// 在 CameraDirector 角色的 .h 文件中添加以下函数声明
public:
// 切换相机视图的函数
void SwitchCameraView();
// 在 CameraDirector 角色的 .cpp 文件中添加以下代码
// 实现 SwitchCameraView() 函数
void ACameraDirector::SwitchCameraView()
{
// 如果当前活动相机视图是相机视图 1,则将当前活动相机视图切换为相机视图 2
if (ActiveCameraViewName == CameraView1Name)
{
SetCameraViewActive(CameraView2Name);
}
// 否则,将当前活动相机视图切换为相机视图 1
else
{
SetCameraViewActive(CameraView1Name);
}
}
- 在 CameraDirector 角色中设置切换相机视图的键位
在 CameraDirector 角色中,我们需要设置切换相机视图的键位。这个键位可以在玩家按下时调用 SwitchCameraView() 函数,从而切换当前活动相机视图。
// 在 CameraDirector 角色的 .h 文件中添加以下成员变量
private:
// 切换相机视图的键位
FKey SwitchCameraViewKey;
// 在 CameraDirector 角色的 .cpp 文件中添加以下代码
// 在 BeginPlay() 函数中设置切换相机视图的键位
// 设置切换相机视图的键位
SwitchCameraViewKey = EKeys::SpaceBar;
- 在关卡中放置 CameraDirector 角色
最后,我们需要在关卡中放置 CameraDirector 角色。这个角色可以放置在任何位置,但它必须能够看到相机视图 1 和相机视图 2。
总结
在本教程中,我们学习了如何在虚幻引擎 4 中使用 C++ 编程语言来创建和切换两个不同的相机视图。通过使用 CameraDirector 角色,我们可以控制游戏中的相机视图,从而让玩家能够从不同的视角来观察游戏世界。