UE4 实现Timer \C++

12 篇文章 1 订阅

0. 描述

  1. UE 写timer
  2. timer调用函数
  3. 符合条件清除 timer handel

1. 不带参数

1.1 头文件.h文件添加:

	FTimerHandle TestHandel; //声明一个句柄
	void test_timer(); //timer回调函数
	void SetTimer();//调用timer
	int i = 0;

1.2. 方法实现.cpp文件添加:

  • FTimerHandle 计时器句柄 对计时器进行控制

  • InTimerMethod 计时器执行时调用的函数

  • InRate 多久调用一次

  • InbLoop 是否循环

  • InFirstDelay 触发后到第一次调用函数的时间,小于0的时使用inRate。

	#include "Engine/Classes/Kismet/GameplayStatics.h"
	
	void AMyPawn::SetTimer() //设置timer的函数
	{
		UWorld* world = this->GetWorld();//world可能为空,所以要判断一下
		if (world)
		{
			// 3s后执行test_timer(), 每2s执行一次
		    world->GetTimerManager().SetTimer(TestHandel, this, &AMyPawn::test_timer, 2.0f, true, 3.0f);
		}
	}
	
	void AMyPawn::test_timer()
	{
		// 这里执行10次, 10次后清除timer, 这里不再执行
		UE_LOG(LogTemp, Warning, TEXT("timer exec Succeed!"));
		i++;
		if (i>10)
		{
			UWorld* world = this->GetWorld();//world可能为空,所以要判断一下
			if (world)
			{
				world->GetTimerManager().ClearTimer(TestHandel);
				UE_LOG(LogTemp, Warning, TEXT("timer clear Succeed!"));
			}
		}
	}

2. 带参数

2.1 方式1

  • .h
    void timer(int32 a);
    void Calltimer();
    
  • .cpp
    void AActor::Calltimer()
    {
        int32 a = 3;
        FTimerHandle UniqueHandle;
        FTimerDelegate RespawnDelegate = FTimerDelegate::CreateUObject(this, &AActor::timer, a);
        GetWorldTimerManager().SetTimer(UniqueHandle, RespawnDelegate, 3.0f, false);
    
    }
    void AActor::timer(int32 a)
    {
    	
    }
    

2.2 方式2

  • .h
    void Calltimer();
    
    UFUNCTION()
    void timer(int32 a);
    
  • .cpp
    void AAdapterActor::Calltimer()
    {
        FTimerHandle TimerHandle;
        FTimerDelegate TimerDel;
        int32 a = 1;
        //Binding the function with specific values
        TimerDel.BindUFunction(this, FName(TEXT("timer")), a);
        //Calling MyUsefulFunction after 2 seconds without looping
        GetWorldTimerManager().SetTimer(TimerHandle, TimerDel, 2.0f, false);
    }
    
    void AAdapterActor::timer(int32 a)
    {
    	
    }
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值