UE4.CPP变焦推进效果(_杰森大师)

首先你要有个CameraComponent组件

.h
UPROPERTY(VisibleAnywhere,BlueprintReadWrite,Category="Camera")
class UCameraComponent*CameraComp;
.cpp
include"Camera/CameraComponent.h"
CameraComp=CreateDefaultSuboject<UCameraComponent>(TEXT("CameraComp"));


实现变焦

 然后再tick内添加
	CameraComp->SetFieldOfView();//设置视觉范围
	
但是我们需要触发的bool,
在.H 定义一个bool

	bool bWantToZoom;
	//变焦的FOV
	float ZoomedFOV;
	//游戏开始时的默认FOV
	UPROPERTY(EditDefaultsOnly, Category = "Player")
	float DefaultFOV;
	
又回到.CPP
beginplay函数定义

	DefaultFOV=CameraComp->FieldOfView;
	
tick函数定义

	float CurrentFov=bWantToZoom?ZoomedFOV:DefaultFOV;//解释下这句话的意思是当bWantToZoom为真时用ZoomFov,假时使用DefaultFOV,这是一种速写法
	把CameraComp->SetFieldOfView/*添加这个进去*/(CurrentFOV);

进入SetupPlayerInputComponent函数中增加动作绑定
PlayerInputComponent->BindAction("Zoom",IE_Pressed,this,/*你主角函数的名字*/&AGameCharacter::/*你的函数名字*/BeginZoom);
PlayerInputComponent->BindAction("Zoom",IE_Released,this,/*你主角函数的名字*/&AGameCharacter::/*你的函数名字*/EndZoom);


回到。h定义
	void BeginZoom();
	void EndZoom();

。cpp
void AGameCharacter::BeginZoom()
{
	bWantToBoom = true;
}

void AGameCharacter::EndZoom()
{
	bWantToBoom = false;

}
记得回到引擎项目input设置写zoom设成鼠标右键
这样就实现变焦效果



实现强化平滑过渡

void AGameCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	float TargetFov = bWantToBoom ? ZoomFov : DefaultFov;
	float NewFov = FMath::FInterpTo(CameraComp->FieldOfView, TargetFov, DeltaTime, ZoomInterpSpeed);
	CameraComp->SetFieldOfView(NewFov);
	if (CurrentWeapon)
	{
		CurrentWeapon->SetOwner(this);
		CurrentWeapon->AttachToComponent(GetMesh(), FAttachmentTransformRules::SnapToTargetNotIncludingScale, WeaponAttachSocketName);
	}
}.H添加
	UPROPERTY(EditDefaultsOnly, Category = "Player", meta = (ClampMin = 0.0, ClampMax = 100))//meta是指把flaot限制在0.1到100之间
		float ZoomInterpSpeed;
		
		去。cpp
AGameCharacter::AGameCharacter()
{
	ZoomFov = 65.0f;
	ZoomInterpSpeed = 20;
}

搞定

发布了20 篇原创文章 · 获赞 1 · 访问量 2710

猜你喜欢

转载自blog.csdn.net/weixin_42295465/article/details/88308597