UE4 c++重构简单死亡之眼的效果

发布时间 2023-11-09 09:43:42作者: XTG111

虚幻社区中有蓝图教学视频
image
使用C++重构,主要用到UGameplayStatics类中的SetGlobalTimerDilation方法,以及角色的相机管理器的调用,之后通过StartCameraFade方法实现显示效果

UE4中的时间膨胀

参考
全局方法:SetGlobalTimerDilation(GetWorld(),Timer);
对单个对象的时间膨胀:this->CustomTimeDilation = Timer;
Timer的选择主要有4个层级

  • 0:super lenta
  • 0.25: lenta
  • 1: normal
  • 2: rapida

获取相机管理器

UE4为相机管理器专门建立了一个类APlayerCameraManager,我们需要利用UGameplayStatics::GetPlayerCameraManager获取当前角色的相机。需要传入UObject和index。

实现颜色变化效果

相当于给摄像机加一个滤镜,所以利用上一步获取的摄像机对象调用StartCameraFade()方法

void APlayerCameraManager::StartCameraFade(float FromAlpha, float ToAlpha, float InFadeTime, FLinearColor InFadeColor, bool bInFadeAudio, bool bInHoldWhenFinished)

image

实现FlipFlop效果

参考
首先定义一个布尔变量,然后每次调用函数,改变这个布尔变量的值。

bool bFlipFlop = false;

void FlipFlop()
{
  bFlipFlop = !bFlipFlop;
}

完整c++代码

//.h文件
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
	bool bFlipFlop;
/** 实现慢动作播放*/
void DeathEyes();

//.cpp文件
bFlipFlop = false;//构造函数中

//void ASimpleDeathEyesCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
PlayerInputComponent->BindAction("DE", IE_Pressed, this, &ASimpleDeathEyesCharacter::DeathEyes);

void ASimpleDeathEyesCharacter::DeathEyes()
{
	bFlipFlop = !bFlipFlop;
	if (bFlipFlop) 
	{
		UGameplayStatics::SetGlobalTimeDilation(GetWorld(), 0.25f);
		APlayerCameraManager* TargetCamera = UGameplayStatics::GetPlayerCameraManager(this, 0);
		FColor MyColor1 = FColor(255, 192, 203, 255);
		TargetCamera->StartCameraFade(0.0f, 0.25f, 1.0f, MyColor1, false, true);
	}
	else 
	{
		UGameplayStatics::SetGlobalTimeDilation(GetWorld(), 1.0f);
		APlayerCameraManager* TargetCamera = UGameplayStatics::GetPlayerCameraManager(this, 0);
		FColor MyColor2 = FColor(0, 0, 0, 255);
		TargetCamera->StartCameraFade(0.0f, 0.0f, 0.0f, MyColor2, false, false);
	}
}