Unreal

C++中实现行为队列

我们在日常的优化过程中,经常会遇到需要分帧的情况,但是UE4本身不提供类似于协程的功能,如果要分帧经常需要使用Task等较重量的代码工具。这里我们提出一个ActionQueue的方案。我们可以用函数式的方式来进行分帧。

FActionQueue::Get:用于获取一个新的ActionQueue

Queue->AddCallbackAction: 将行为放入行为队列,行为结束之后调用Callback即可调用下一个队列中的行为

Queue->WaitForNextTick:在等待一帧之后调用下一个队列中的行为

Queue->Wait:等待一定时间后调用下一个队列中的行为

Queue->AutoDestroy:在队列为空的时候自动回收行为队列

我们还可以重写Get以及Destroy的逻辑以做到队列复用:

在实际使用中,高耗时产生的抖动变为持续几帧的小耗时:

详见项目中的:FActionQueue.h以及FActionQueue.cpp。因为在蓝图中需要使用,所以我们自行包装一个ActionQueueObject,为了复用,我们用自己写了一个ActionQueueManager用于复用。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注