简介
通过cpp代码自动在两个摄像机之间来回切换,达到切换不同视角。官方文档地址
实践
- 创建好ue4-cpp项目
- 在 Place Actors窗口下的 All Classes标签下面找到 Camera组件拖拽到地图任意位置
- 在 Place Actors窗口下的 Basic标签下面找到 Cube拖拽到地图的任意位置
- 点击选中 Cube,并在 Details面板下 点击 Add Component,选择添加 Camera组
- 创建 CameraDirector类,父类为 Actor
- 在 CameraDirector头文件下添加代码:
/** class MYFIRSTCPPDEMO_API ACameraDirector : public AActor 下添加代码 */
UPROPERTY(EditAnywhere)
AActor* CameraOne;
UPROPERTY(EditAnywhere)
AActor* CameraTwo;
float TimeToNextCameraChange;
定义两个 AActor变量,用于控制地图中的两个摄像机组件
TimeToNextCameraChange 变量
两个摄像机进行切换的时间间隔
- 在 CameraDirector源文件中添加代码
/** void ACameraDirector::Tick(float DeltaTime) 下添加代码 */
// 摄像机切换需要的时间
const float TimeBetweenCameraChanges = 2.0f;
// 平滑混合的时间间隔
const float SmoothBlendTime = 0.75f;
// 初始化 TimeToNextCameraChange
TimeToNextCameraChange -= DeltaTime;
UE_LOG(LogTemp, Warning, TEXT("TimeToNextCameraChange : %f"), TimeToNextCameraChange);
if (TimeToNextCameraChange <= 0.0f)
{
// 重置摄像机切换时间
TimeToNextCameraChange += TimeBetweenCameraChanges;
// 获取本地玩家控制器
APlayerController* MyPlayerController = UGameplayStatics::GetPlayerController(this, 0);
if (MyPlayerController)
{
// 如果当前玩家控制器不是在 CameraOne上,则立即进行切换
if (CameraOne != nullptr && MyPlayerController->GetViewTarget() != CameraOne)
MyPlayerController->SetViewTarget(CameraOne);
// 如果当前玩家控制器不是在 CameraTwo上,则平滑进行切换
else if (CameraTwo != nullptr && MyPlayerController->GetViewTarget() != CameraTwo)
MyPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);
}
}
TimeBetweenCameraChanges 变量
摄像机切换的一个时间间隔(常量)
SmoothBlendTime 变量
平滑混合的时间间隔(镜头平滑切换摄像机所经历的时间)
TimeToNextCameraChange -= DeltaTime
TimeToNextCameraChange 初始值为0,减去 DeltaTime之后就已经是负数,所以游戏开始就会进行摄像机的切换
TimeToNextCameraChange += TimeBetweenCameraChanges
重新给 TimeToNextCameraChange赋值为2.0f
APlayerController* MyPlayerController = UGameplayStatics::GetPlayerController(this, 0)
获取当前玩家控制器
后面就是判断 玩家控制器是否控制着 CameraOne,如果不是,则立即切换到 CameraOne;同理 玩家控制器控制的不是CameraTwo,则进行平滑切换到 CameraTwo上
- 完成 CameraDirector源文件的编写之后,到 ue4中进行编译,通过之后在 Content Brower中找到 CameraDirector类,将其拖拽到地图中;然后在 Details面板中设置 CameraOne 为 CameraActor,CameraTwo 为 Cube(两个对象的设置可以调换),完成设置操作之后运行游戏
后记
在跟着官方文档学习的时候,由于只看到第二步(已经完成了地图摄像机的布置和cpp代码的编写),自以为可以运行测试了,然后编译之后发现没有报错,但是没有完成摄像机之间的切换。然后自己便抛下文档,研究起来哪个步骤出问题,卡了自己很长时间。(以后都要先看完一遍文档,然后才开始实操)
笔记中如有理解错误的地方,希望看到的大佬不吝指正,十分感谢。继续加油!