UE4游戏控制的摄像机

简介

通过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代码的编写),自以为可以运行测试了,然后编译之后发现没有报错,但是没有完成摄像机之间的切换。然后自己便抛下文档,研究起来哪个步骤出问题,卡了自己很长时间。(以后都要先看完一遍文档,然后才开始实操)

笔记中如有理解错误的地方,希望看到的大佬不吝指正,十分感谢。继续加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值