打开玩家类,先添加几个变量
//是否想要瞄准
bool bWantToZoom;
//瞄准的面积值
UPROPERTY(EditDefaultsOnly, Category = "Player")
float ZoomedFOV;
//默认的瞄准面积值
float DefaultsFOV;
//开镜速度
UPROPERTY(EditDefaultsOnly, Category = "Player")
float ZoomInterpSpeed;
在 构造函数中初始化ZoomedFOV和ZoomInterpSpeed
ZoomedFOV = 65;
ZoomInterpSpeed = 20;
在游戏开始函数里初始化 DefaultsFOV
void ASCharacter::BeginPlay()
{
Super::BeginPlay();
DefaultsFOV = CameraComp->FieldOfView;
}
然后声明两个函数
//开始瞄准的动作
void BeginZoom();
//结束瞄准动作
void EndZoom();
然后定义这两个函数
void ASCharacter::BeginZoom()
{
bWantToZoom = true;
}
void ASCharacter::EndZoom()
{
bWantToZoom = false;
}
在每帧函数里,修改相机的视野
// Called every frame
void ASCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
//目标视角面积
float TargetFov = bWantToZoom ? ZoomedFOV : DefaultsFOV;
//当前视野面积
float NewFOV = FMath::FInterpTo(CameraComp->FieldOfView, TargetFov, DeltaTime, ZoomInterpSpeed);
//设置摄像机当前的视角面积
CameraComp->SetFieldOfView(NewFOV);
}
在项目设置里添加一个映射
然后绑定输入
//开镜
PlayerInputComponent->BindAction("Zoom", IE_Pressed, this, &ASCharacter::BeginZoom);
PlayerInputComponent->BindAction("Zoom", IE_Released, this, &ASCharacter::EndZoom);