【UE4 C++】定时器 Timer 与事件绑定

66 篇文章 6 订阅

概念

  • 定时执行操作,可执行一次,或循环执行直到手动终止
  • 定时器在全局定时器管理器(FTimerManager 类型)中管理。全局定时器管理器存在于 游戏实例 对象上以及每个 场景 中
  • 定时器需要绑定委托或函数,作为执行体。这些函数将填充 FTimerHandle 定时器句柄
  • FTimerHandle 支持 暂停、恢复倒计时;查询或更改剩余时间;取消定时器
  • 设置定时器的函数
    • SetTimer 定时执行
    • SetTimerForNextTick 下一帧执行
  • 使用案例
    • 定时 SpawnActor
    • 定时销毁
    • buff持续,如霸体、持续伤害

设置定时器

  • SetTimer 方法

  • 支持 FTimerDelegate 委托,可以扩展使用 Lambda 表达式,可以带参数

  • GetWorldTimerManager() 等价于 GetWorld()->GetTimerManager()

    template<class UserClass>
    void SetTimer
    (
        FTimerHandle & InOutHandle,
        UserClass * InObj,
        typename FTimerDelegate::TUObjectMethodDelegate_Const< UserClass >::FMethodPtr InTimerMethod,
        float InRate,
        bool InbLoop,
        float InFirstDelay
    )
    
  • 代码实现

    FTimerHandle SpawnerHandle;
    
    GetWorldTimerManager().SetTimer(SpawnerHandle, this, &AEnenmySpawner::SpawnEnemy, 5.0f, true);	
    
    void AEnenmySpawner::SpawnEnemy()
    {
    	GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, "Spawn");
    }
    

清空定时器

  • ClearTimer

  • ClearAllTimersForObject 清空与特定对象关联的所有定时器

    GetWorldTimerManager().ClearTimer(SpawnerHandle);
    
    // 参数传入一个对象,本例以 this 举例
    GetWorldTimerManagerr().ClearAllTimersForObject(this);
    

暂停和恢复

  • PauseTimer

  • UnPauseTimer

    GetWorldTimerManager().PauseTimer(SpawnerHandle);
    GetWorldTimerManager().UnPauseTimer(SpawnerHandle);
    GetWorldTimerManager().IsTimerPaused(SpawnerHandle);
    

判断是否活跃且未暂停

  • IsTimerActive

    GetWorldTimerManager().IsTimerActive(SpawnerHandle);
    

获取定时器速率

  • GetTimerRate
    句柄若无效,返回-1

    GetWorldTimerManager().GetTimerRate(SpawnerHandle);
    

获取经过时间和剩余时间

  • GetTimerElapsed
    句柄若无效,返回-1

  • GetTimerRemaining
    句柄若无效,返回-1

    GetWorldTimerManager().GetTimerElapsed(SpawnerHandle);
    GetWorldTimerManager().GetTimerRemaining(SpawnerHandle);
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值