首先你要有个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;
float ZoomedFOV;
UPROPERTY(EditDefaultsOnly, Category = "Player")
float DefaultFOV;
又回到.CPP
beginplay函数定义
DefaultFOV=CameraComp->FieldOfView;
tick函数定义
float CurrentFov=bWantToZoom?ZoomedFOV: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))
float ZoomInterpSpeed;
去。cpp
AGameCharacter::AGameCharacter()
{
ZoomFov = 65.0f;
ZoomInterpSpeed = 20;
}
搞定