UE C++ 多镜头设置缩放 平移

一.整体思路

首先需要在 想要控制的躯体Pawn上,生成不同相机对应的SpringArm组件。其次是在Controller上,拿到这个Pawn,并在其中设置输入响应,并定义响应事件。响应事件里有指向Pawn的指针,并把Pawn的缩放平移功能进行调用。

二.

1.CameraPawn的组件构成

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MySceneComponent)
	USceneComponent* MyRoot;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MySceneComponent)
	USpringArmComponent* MySpringArm;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = MySceneComponent)
	UCameraComponent* MyCamera;

	void Zoom(bool Direction, float ZoomSpeed);
	void Panx(float x);
	void Pany(float y);
	void Back();
ACameraPawn::ACameraPawn()
{
 	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
	MyRoot = CreateDefaultSubobject<USceneComponent>(TEXT("MyRootComponent"));
	MySpringArm = CreateDefaultSubobject <USpringArmComponent>(TEXT("MySpringArmComponent"));
	MyCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("MySCameraComponent"));
	RootComponent = MyRoot;
	MySpringArm->SetupAttachment(MyRoot);
	MyCamera->SetupAttachment(MySpringArm);
	MySpringArm->bDoCollisionTest = false;
}

2.将Pawn自己镜头伸缩,平移功能,复原写好

void ACameraPawn::Zoom(bool Direction, float ZoomSpeed) {
	if (Direction) {
		if (MySpringArm->TargetArmLength >= 300 && MySpringArm->TargetArmLength < 5000) {
			MySpringArm->TargetArmLength += (ZoomSpeed * 2);
			GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("SpringArmLength is %f"), MySpringArm->TargetArmLength));
		}
	}
	else {
		if (MySpringArm->TargetArmLength > 300 && MySpringArm->TargetArmLength <= 5000) {
			MySpringArm->TargetArmLength -= (ZoomSpeed * 2);
			GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("SpringArmLength is %f"), MySpringArm->TargetArmLength));
		}
	}
}

void ACameraPawn::Panx(float x)
{
	MyCamera->AddLocalOffset(FVector(0,x,0));
}

void ACameraPawn::Pany(float y)
{
	MyCamera->AddLocalOffset(FVector(0,0,y));
}

void ACameraPawn::Back()
{
	MyCamera->SetRelativeLocation(FVector(0,0,0));
}

 3.在MyPlayerController里面绑定输入映射,以及响应的事件。

	virtual void SetupInputComponent();

	void WheelUpFunction();

	void WheelDownFunction();

	void PanX(float x);
	void PanY(float y);
	void Back();
	

4.绑定映射

void AMyPlayerController::SetupInputComponent()
{
	Super::SetupInputComponent();
	InputComponent->BindAction("WheelUp", IE_Pressed, this, &AMyPlayerController::WheelUpFunction);
	InputComponent->BindAction("WheelDown", IE_Pressed, this, &AMyPlayerController::WheelDownFunction);
	InputComponent->BindAction("BackXY",IE_Pressed,this,&AMyPlayerController::Back);
	InputComponent->BindAxis("PanX",this,&AMyPlayerController::PanX);
	InputComponent->BindAxis("PanY",this,&AMyPlayerController::PanY);
	//InputComponent->BindAction("ESCEvent", IE_Pressed, this, &AMyPlayerController::ESCEvent).bExecuteWhenPaused=true;//游戏暂停可以执行
	//InpuptComponent->BindAxis("PanY",this,);
}

5.响应事件,并操控控制到对应的Pawn里的函数。

void AMyPlayerController::WheelUpFunction()
{
	if (GetPawn()) {
		     ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());
				if (MyCameraPawn) {
					MyCameraPawn->Zoom(1, 10);
				}
			}
}

void AMyPlayerController::WheelDownFunction()
{
		if (GetPawn()) {
			ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());
		if (MyCameraPawn) {
			MyCameraPawn->Zoom(0, 10);
		}
	}
}

void AMyPlayerController::PanX(float x)
{
	if (GetPawn())
	{
		ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());
		if (MyCameraPawn) {
			MyCameraPawn->Panx(x);
		}
	}
}

void AMyPlayerController::PanY(float y)
{
	if (GetPawn())
	{
		ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());
		if (MyCameraPawn) {
			MyCameraPawn->Pany(y);
		}
	}
}

void AMyPlayerController::Back()
{
	if (GetPawn())
	{
		ACameraPawn* MyCameraPawn = Cast<ACameraPawn>(GetPawn());
		if (MyCameraPawn) {
			MyCameraPawn->Back();
		}
	}
}

6.需要在ProjectSetting里面,设置使用的按键。

三.可能需要注意的

1.Pawn这里,需要Poccess。不然会控制不到。

2.SpringArm设置视角的位置。Camera最好都是相对位置为0,这样视角返回默认值可以用。

MyCamera->SetRelativeLocation(FVector(0,0,0));

在使用UE4制作大场景时,经常需要对场景进行鼠标平移,旋转和缩放等操作。这些操作可以极大地提高制作效率和操作舒适度。下面将从三个方面来介绍UE4大场景鼠标平移旋转缩放。 1. 鼠标平移 在大场景,我们常常需要对场景进行平移操作,以便查看不同角度的细节。UE4可以通过快捷键或操作面板对场景进行平移。常见的快捷键是按住鼠标右键加上W、A、S、D键进行平移操作。如果想要平移一个物体,可以先选物体,再按住W、A、S、D键进行物体平移。 2. 鼠标旋转 场景的旋转也是常用的操作。在大场景,我们可以使用鼠标滚轮来进行场景旋转。同时也可以通过快捷键Ctrl+鼠标右键来旋转场景。如果想要只旋转一个物体,可以选该物体,按住Ctrl+鼠标右键来对该物体进行旋转。 3. 鼠标缩放 在大场景,由于覆盖的面积很广,有时很难看清某个区域的细节。此时,我们可以通过缩放来快速地对场景进行放大或缩小。在UE4,我们可以通过鼠标滚轮来进行场景缩放操作。如果只需要缩放某个物体,可以选该物体,按住鼠标键进行该物体的缩放。 总的来说,在制作大场景时,UE4提供了非常便捷的鼠标操作方式,可以更加高效地进行制作。同时,通过多种操作,我们可以更加从不同角度观察场景细节,提高创作效率和场景质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值