UE5(虚幻5)如何实现每隔5秒执行一次事件

记录一下今天学习的收获....

今天一直想找办法实现每5秒就执行一次刷新控件蓝图的功能,一开始想的很简单,蓝图不是自带有“事件Tick”功能吗?那我给它设个延迟(delay),5秒后再执行不就好了?

但是吧...总觉得是不是不太合适?毕竟虽然每隔一段事件才执行一次事件,但Tick可是每一帧都要触发,只是被延迟拦住了,如果只是一两个蓝图也就算了,万一哪个工程搞了超级多蓝图,同时Tick是不是会卡死?(我也没试过,有条件的朋友可以试试) 

最主要的,Tick只有一个,从蓝图诞生开始就一直在触发,虽然有其他办法控制,但总感觉不方便。

然后我又找到了另一种方式,可操作性就比直接用Tick强多了,那就是“以事件设置定时器”/“以函数设置定时器”功能,我就说嘛,UE5这么大的引擎,这点东西肯定有准备了。

将事件直接绑定到定时器上,设定时间5秒,打开循环(Looping),完美! 

 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 Unreal Engine 5 中,你可以使用 C++ 来实现异步线程执行。下面是一个简单的示例代码: ```cpp #include "Async/Async.h" // 定义一个异步任务 class MyAsyncTask : public FNonAbandonableTask { public: // 构造函数传入需要执行的参数 MyAsyncTask(int32 InParam) : Param(InParam) {} // 在异步线程中执行的任务 void DoWork() { // 执行一些耗时操作,比如计算或者加载资源等等 // ... // 任务执行结束后可以将结果回调到主线程 FGraphEventRef GameThreadTask = FFunctionGraphTask::CreateAndDispatchWhenReady([&]() { // 在主线程中执行回调操作,可以更新UI或者其他逻辑 // ... }, TStatId(), nullptr, ENamedThreads::GameThread); } // 返回任务名称 static const TCHAR* Name() { return TEXT("MyAsyncTask"); } FORCEINLINE TStatId GetStatId() const { RETURN_QUICK_DECLARE_CYCLE_STAT(MyAsyncTask, STATGROUP_ThreadPoolAsyncTasks); } private: int32 Param; }; // 启动异步任务 void StartAsyncTask(int32 Param) { // 创建异步任务并提交到线程池中执行 MyAsyncTask* AsyncTask = new MyAsyncTask(Param); AsyncTask->StartBackgroundTask(); } ``` 在上面的示例代码中,我们定义了一个名为 `MyAsyncTask` 的异步任务,它继承自 `FNonAbandonableTask`,并实现了 `DoWork` 方法来执行异步线程中的任务。在 `DoWork` 方法中,你可以执行一些耗时操作,并在任务结束后通过 `FFunctionGraphTask` 将结果回调到主线程进行处理。 要启动异步任务,你可以调用 `StartAsyncTask` 函数,并传入需要执行的参数。该函数会创建一个 `MyAsyncTask` 实例,并提交到线程池中执行。 请注意,异步任务的执行是在一个单独的线程中进行的,因此你需要确保在任务中不会访问或修改与主线程共享的对象或数据,以避免潜在的竞态条件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值