UE5 C++(十五)— TimerHandle(定时器)的使用

定时器(Timer) 可用于执行延迟类型的操作,或让某些操作在一段时间内重复执行。

设置定时器

定时器的设置只需三步即可完成:声明定时器句柄 FTimerHandle、定义执行函数、设置定时器,其中前两步是第三步的预备工作。

声明FTimerHandle

首先是声明定时器句柄 FTimerHandle,代码实现如下:

#include "TimerManager.h"

UCLASS()
class DEMO_API AMyCharacter : public ACharacter, public IMyInterface
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AMyCharacter();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent *PlayerInputComponent) override;
	//声明定时器变量
	FTimerHandle TimerHandle;
	void TimerFunction();
};

定义执行函数

void AMyCharacter::TimerFunction()
{
	UE_LOG(LogTemp, Warning, TEXT("TimerFunction"));
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("TimerFunction"));
}

设置定时器

注意:不可以在Actor的构造函数中设置定时器

// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{
	Super::BeginPlay();

	// 设置定时器 5秒后执行TimerFunction函数,每5秒执行一次
	GetWorldTimerManager().SetTimer(TimerHandle, this, &AMyCharacter::TimerFunction, 5.f, true);
}

SetTimer() 各个参数的作用如下:

  • InOutHandle:定时器绑定的句柄,如果该句柄已指向其他定时器,则取消这个其他定时器;
  • InObj:调用执行函数的对象;
  • InTimerMethod:定时器所执行的函数;
  • InRate:函数执行的时间间隔,如果<=0,则清除现存定时器,即 InOutHandle 所绑定的定时器;
  • InbLoop:该定时器是否循环,若不循环则只执行一次;
  • InFirstDelay:从设置定时器到执行定时器的时间间隔,若<0,则使用 InRate 代替。

编译之后,运行打印结果
在这里插入图片描述

清除定时器

设置定时器后,一定不要忘了清除定时器。这就像申请了资源,一定要归还一样。取消定时器的话,建议直接使用ClearTimer(),其用法示例如下:


	if (TimeHandle.IsValid())
	{
		GetWorldTimerManager().ClearTimer(TimerHandle);
	}

清除定时器可在 Actor 的 EndPlay() 函数中执行,但在其他地方也是可以的,只是不要忘记清除定时器。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值