计时器的功能
当敌人处在易受到攻击的时候
不会一直处在易受攻击的状态
过了10秒之后返回正常的状态
这个时候需要10秒的计时
private:
FTimerHandle TimeVulnerable;
// 定义一个变量来判断当前的状态
bool bIsVulnerable;
#include "Public/TimerManager.h"
#include "GameFramework/CharacterMovementComponent.h"
void AEnemy::SetVulnerable()
{
// 吃到豆子可以增加10
// 过一段时间可以不受攻击
// 使用GetWorldTimerManager(),需要引入头文件:#include "Public/TimerManager.h"
// 第一个参数是TimeVulnerable;第二个参数:作用在哪个类;第三个参数:作用于哪个函数;第四个参数:时间间隔;第五个参数:是否循环
GetWorldTimerManager().SetTimer(TimeVulnerable, this, &AEnemy::SetInVulnerable, 10.0f, false);
if (bIsVulnerable)
{
return;
}
bIsVulnerable = true;
// 连续吃到豆子,敌人当前的状态已经设置成了易受攻击的状态
// 没必要执行 EnemyBody->SetMaterial(0, VulnerableMaterial);
// 定义一个变量来判断当前的状态,已经是易受到攻击的状态,没必要设置材质了
// 时间段可以从10秒变成20秒外,剩下的都不需要再改变了
EnemyBody->SetMaterial(0, VulnerableMaterial);
// 使用GetCharacterMovement(),需要引入的头文件:#include "GameFramework/CharacterMovementComponent.h"
GetCharacterMovement()->MaxWalkSpeed = 50.0f;
}
void AEnemy::SetInVulnerable()
{
GetWorldTimerManager().ClearTimer(TimeVulnerable);
bIsVulnerable = false;
EnemyBody->SetMaterial(0, DefaultMaterial);
GetCharacterMovement()->MaxWalkSpeed = 150.0f;
}
// 使用GetWorldTimerManager(),需要引入头文件:#include "Public/TimerManager.h"
// 使用GetCharacterMovement(),需要引入的头文件:#include "GameFramework/CharacterMovementComponent.h"