在玩家类的源文件里,导入character类的移动组件头文件
#include "GameFrameWork/CharacterMovementComponent.h"
定义一下SetMovement(bool bcanmove)函数
void APacdotPlayer::SetMovement(bool bcanmove)
{
if (bcanmove)
{
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
}
else
{
GetCharacterMovement()->MaxWalkSpeed = 0;
}
}
在游戏开始函数里,调用这个函数
//移动速度
SetMovement(true);
同理,我们定义敌人类的SetMovement(bool bcanmove)函数
void APacdotEnermy::SetMovement(bool bcanmove)
{
if (bcanmove)
{
//这是不虚弱也不死亡状态,是正常速度
if (bIsVulnerable == false && bIsDeath == false)
{
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
}
//虚弱但不死亡状态,是虚弱速度
if (bIsVulnerable == true && bIsDeath == false)
{
GetCharacterMovement()->MaxWalkSpeed = VulnerableSpeed;
}
//死亡速度为0
if (bIsDeath == true)
{
GetCharacterMovement()->MaxWalkSpeed = 0;
}
}
else
{
GetCharacterMovement()->MaxWalkSpeed = 0;
}
}
在游戏开始函数里,调用该函数
//移动速度
SetMovement(true);
=======================================================
在敌人类声明两个计时器变量
//两个状态的计时器
FTimerHandle DeathTimerHandle;
FTimerHandle VulnerableTimerHandle;
定义一下SetVulnerable(bool bRestoreTimer , float Time )函数
void APacdotEnermy::SetVulnerable(bool bRestoreTimer , float Time )
{
//用来恢复状态
if (bRestoreTimer)
{
GetWorldTimerManager().SetTimer(VulnerableTimerHandle, this, &APacdotEnermy::SetNormal, Time ,false);
}
else
{
//VulnerableTime时间后,虚弱状态变成正常状态
GetWorldTimerManager().SetTimer(VulnerableTimerHandle, this, &APacdotEnermy::SetNormal, VulnerableTime, false);
}
if (bIsVulnerable)
{
return;
}
//改变状态
bIsVulnerable = true;
//改变速度
SetMovement(true);
}
定义一下SetDeath(bool bRestoreTimer , float Time )
void APacdotEnermy::SetDeath(bool bRestoreTimer , float Time )
{
if (bRestoreTimer && bIsDeath)
{
GetWorldTimerManager().SetTimer(DeathTimerHandle, this, &APacdotEnermy::SetNormal, Time, false);
return;
}
if (bIsDeath)
{
return;
}
//变成死亡状态
bIsDeath = true;
//改变移动速度
SetMovement(true);
//回到出生点
SetActorLocation(StartLocation);
GetWorldTimerManager().ClearTimer(VulnerableTimerHandle);
//重生倒计时
GetWorldTimerManager().SetTimer(DeathTimerHandle, this, &APacdotEnermy::SetNormal, DeathTime, false);
}
定义一下SetNormal()
void APacdotEnermy::SetNormal()
{
GetWorldTimerManager().ClearTimer(VulnerableTimerHandle);
GetWorldTimerManager().ClearTimer(DeathTimerHandle);
bIsDeath = false;
bIsVulnerable = false;
SetMovement(true);
}