定时器官方文档:文档地址
总结后代码如下:
//定义定时器Handle
FTimerHandle TimerHandle;
//定义定时器管理器
FTimerManager &TimerMgr = GEngine->GetWorldContextFromGameViewport(GEngine->GameViewport)->World()->GetTimerManager();
if (TimerMgr.IsTimerActive(TimerHandle) || TimerMgr.IsTimerPaused(TimerHandle))
{
//重置定时器
TimerMgr.ResetTimer(TimerHandle);
}
else
{
TimerMgr.SetTimer(TimerHandle,
//定时器回调函数
FTimerDelegate::CreateLambda(
[this]()
{
GEngine->GetWorldContextFromGameViewport(GEngine->GameViewport)- >World()->GetTimerManager().ClearTimer(TimerHandle);
}
),
3.0f,//3秒后执行回调函数
false//是否循环执行
);
}
注:UE4中的代理创建方式
DECLARE_DELEGATE(DelegateWithoutParam);
DelegateWithoutParam OnClick;
OnClick.BindUObject(this, &ACameraCharacter::OnBtnClick); //this只能是继承自UObject的类
OnClick.BindUFunction(this, "BP_DelegateUFunction"); //this中的蓝图中的方法
OnClick.BindSP(mTestPtr.Get(), &Test::Output) //继承自TShareFromThis<XXX>的类
OnClick.BindStatic(&StaticFunc); //静态方法
OnClick.BindLambda(LambdaFunc); //lambda表达式(匿名函数)