UE5 C++ 定时器使用

概念

  • 定时器在全局定时器管理器(FTimerManager类型)中管理。
  • 全局定时器管理器存在于 游戏实例 对象上以及每个场景中。
  • 有两个函数可以使用定时器管理器来设置定时器:SetTimerSetTimerForNextTick,它们各自都有一些重载,每个函数都可以连接到任意类型的对象或函数委托
  • 函数需要使用UFUNCTION()标识

使用

  • 访问定时管理器

    • Actor及其派生类中使用 GetWorldTimeManager函数
  • 访问全局定时器管理器

    • UGameInstance::GetTimerManager();
    • 全局管理器可以用于与任何特定场景的存在没有相关性或依赖性的函数调用
  • 定时器
    1.设置

    template<class UserClass>
    void SetTimer
    (
        FTimerHandle & InOutHandle,
        UserClass * InObj,
        typename FTimerDelegate::TUObjectMethodDelegate< UserClass >::FMethodPtr InTimerMethod,
        float InRate,
        bool InbLoop,
        float InFirstDelay
    )
    

    2.清空:

    • 将 SetTimer 期间填充的 FTimerHandle 传递到 FTimerManager 函数 ClearTimer
      GetWorldTimerManager().ClearTimer(YourTimerHnadleInstance);
    • 使用现有定时器句柄调用 SetTimer 将清空该定时器句柄引用的定时器,并将它换成新定时器
    • 与特定对象关联的所有定时器都可以通过调用 GetWorldTimerManager().ClearAllTimersForObject(objectInstance);来清空

    3.暂停与恢复

    • FTimerManager::PauseTimer()使用定时器句柄来暂停正在运行的定时器。这样可阻止定时器执行其函数调用,但经过的时间和剩余时间将保持暂停时的状态
    • FTimerManager::PauseTimer()使暂停的定时器恢复运行

    4.定时器信息

    • FTimerManager::IsTimerActive()函数用于确定指定定时器当前是否活跃且未暂停。
    • FTimerManager::GetTimerRate()用于从定时器句柄获取定时器的当前速率(两次激活之间的时间)
    • FTimermanager::GetTimerElapsed()&GetTimerRemaining(),针对与所提供的定时器句柄关联的定时器,提供了返回经过时间和剩余时间的功能

    5.传递参数

    FTimerHandle UniqueHandle;
    FTimerDelegate RespawnDelegate = FTimerDelegate::CreateUObject( this, &AMyGameMode::RespawnPlayer, Player );
    GetWorldTimerManager().SetTimer( UniqueHandle, RespawnDelegate, Delay, false );
    
posted @   scyrc  阅读(1239)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示