当前位置: 首页 > news >正文

U++中的Timer定时器

本文主要用于记录UECpp笔记。


基础用法:

#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "CppTest_1.generated.h" UCLASS() class NEW_CPP_API ACppTest_1 : public AActor { GENERATED_BODY() public: ACppTest_1(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; void PrintAfterDelay(); };
#include "CppTest_1.h" ACppTest_1::ACppTest_1() { PrimaryActorTick.bCanEverTick = true; } void ACppTest_1::BeginPlay() { Super::BeginPlay(); FTimerHandle TimerHandle; GetWorldTimerManager().SetTimer( TimerHandle, this, &ACppTest_1::PrintAfterDelay, 5.0f, false ); } void ACppTest_1::PrintAfterDelay() { if (GEngine) { GEngine->AddOnScreenDebugMessage( -1, 5.0f, FColor::Green, TEXT("5 seconds later") ); } } void ACppTest_1::Tick(float DeltaTime) { Super::Tick(DeltaTime); }

GetWorldTimerManager().SetTimer(TimerHandle, this, &类名::函数名, 5.0f, false);

传入的timerhandle参数是一个引用;&类名::函数名字,是获取函数地址;布尔变量表示是否循环。


着重讲解一下TimerHandle。

在SetTimer之前需要先定义FTimerHandle TimerHandle,它是定时器的标识符(注:在UE中F开头表示结构体)。

不存在同一个timerhandle同时管理两个定时器,后一个定时器会去取代前一个定时器。如需要两个独立定时器,应使用两个句柄。

GetWorldTimerManager().SetTimer( TimerHandle, this, &ACppTest_1::FunctionA, 5.0f, false ); // 使用同一个句柄重新设置 GetWorldTimerManager().SetTimer( TimerHandle, this, &ACppTest_1::FunctionB, 2.0f, false );

ClearTimer()停止并彻底清除,clear是将定时器从管理器中删除,如果要重新运行,需要再次调用TimerHandle。

PauseTimer()暂停定时器,如果运行四秒停止,即便游戏已经运行20妙,定时器记录的仍然是四秒,不会减少。

UnPauseTimer(),取消暂停,从剩余位置继续。

IsTimerActive(),判断是否正在运行(并非判断是否存在),返回bool值。

IsTimerPause(),判断是否暂停(clear后,输出false)。

TimerExists()判断是否存在于管理器中(clear后,输出false)。

//判断常见写法: if (GetWorldTimerManager().IsTimerActive(TimerHandle)) { UE_LOG(LogTemp, Warning, TEXT("定时器正在运行")); } else if (GetWorldTimerManager().IsTimerPaused(TimerHandle)) { UE_LOG(LogTemp, Warning, TEXT("定时器已暂停")); } else { UE_LOG(LogTemp, Warning, TEXT("定时器不存在")); }

GetTimerRemaining():获取每一轮(循环定时器)的剩余时间。如果是一个十秒钟的计时器,已经过去三秒,则返回7.0f;定时器不存在则返回-1.0f。

// 停止并清除定时器 GetWorldTimerManager().ClearTimer(TimerHandle); // 暂停定时器 GetWorldTimerManager().PauseTimer(TimerHandle); // 恢复定时器 GetWorldTimerManager().UnPauseTimer(TimerHandle); // 判断定时器是否存在 GetWorldTimerManager().IsTimerActive(TimerHandle); // 获取剩余时间 GetWorldTimerManager().GetTimerRemaining(TimerHandle);

写在最后:TimerHandle一般在头文件的private或protected中创建;定时器一般写在BeginPlay和合适的事件/成员函数中,一般不写在Tick中。

http://www.jsqmd.com/news/1168483/

相关文章:

  • 开源163MusicLyrics:打破音乐平台壁垒的歌词提取革命
  • Qwen3.6-27B-OptiQ-4bit震撼发布:Apple Silicon专属4-bit量化模型如何突破性能极限?
  • 2026年温岭手机维修口碑排行榜,这家公司稳居Top3! - GrowUME
  • 工业负载控制方案:TPD2015FN与STM32F446RE实战
  • 这5种网络设备可千万别拿出来了,2026年已经过时了
  • 东莞名表回收,添价收全国连锁实力背书!本地实体店直营,欧米茄、浪琴估价透明,让莞城客户享受总部级鉴定服务 - 奢侈品回收中心
  • TGLStackedViewController常见问题解决:调试与故障排除指南
  • 宝珀回收价格查询和各大回收平台实测排行(2026年7月最新) - 尊奢回收二奢平台
  • TPA3128D2音频放大器与PIC18F65K40 MCU的高效音频系统设计
  • Ornith-1.0-35B-bf16的MoE专家融合技术深度解析:高效部署与性能优化指南
  • cryptohack-GeneralMATHEMATICS-Extended GCD-
  • 2026毓典奢品汇|天津黄金回收价格排行榜五大正规机构综合实力PK+实时行情分级 - 奢侈品测评参考
  • 亨得利官方名表服务中心|最新官方地址和全部热线权威信息通告(2026年7月更新) - 亨得利官方
  • CANN/ops-nn融合偏置LeakyReLU梯度算子
  • 上海侵犯商业秘密罪律师推荐|客户信息泄露、技术秘密窃取等辩护 - 法律资讯
  • NBM7100A与PIC18F46K22实现纽扣电池高效管理方案
  • mlx-community/gemma-4-12B-it-OptiQ-4bit实战教程:从安装到高级文本生成应用
  • 2026 北京专业地接社口碑榜,暑期靠谱精品小团出行指南 - 资讯纵览
  • CANN/ops-cv ROIAlign反向传播算子
  • AI 驱动代码 Review 性能检查——自动识别性能反模式并 PR 标注
  • 003、读出电路深度剖析:列并行ADC与单斜率ADC的噪声特性及帧率影响
  • CSP 202309-2 坐标变换(其二)实战:从几何变换到前缀和代码实现
  • 如何为MatrixCPP编写远程函数:BISHENG_REMOTE宏的完整使用手册
  • 2026 嘉善上门黄金回收实测实录,行情解读与线下门店交易避坑全梳理 - 微城市网络
  • 3_Python高级技巧
  • Unity 相机:正交 (Orthographic) vs 透视 (Perspective)
  • 如何用H5P交互式视频将普通视频变成互动学习神器
  • 基于SpringBoot + Vue工程机械租赁平台
  • MateCloud版本管理:微服务架构下的多版本API兼容性终极指南
  • NVIDIA-Nemotron-3-Nano-30B-A3B-OptiQ-4bit模型架构:128专家稀疏MoE系统解析 [特殊字符]