如何在Unity3D中处理队列

本文关键字:处理 队列 Unity3D | 更新日期: 2023-09-27 18:05:23

我已经在我的游戏中实现了System.Collections.Queue来收集所有传入的TCP消息。

现在,我只是在Update()中处理Queue中最老的消息(如果队列不是空的)

然而,两个帧之间的时间通常比处理一条消息所花费的时间要长得多。

我想知道是否有一种方法可以在前一个消息完成时处理消息,而不会冻结游戏。

我已经尝试了协程,但它改变了什么,因为yield return null;似乎等待下一帧(所以它就像一个更新())。

如何在Unity3D中处理队列

您可以实现CustomYieldInstruction等待,直到您的消息到达:

class WaitWhileMessageArrives: CustomYieldInstruction 
{
    Func<bool> m_Predicate;
    public override bool keepWaiting { get { return m_Predicate(); } }
    public WaitWhileMessageArrives(Func<bool> predicate) { m_Predicate = predicate; }
}

像这样使用:

(注意:这段代码只是一个给出基本思想的例子,因为你还没有提供你的代码)

IEnumerator ProcessMessages()
{
    while(yourQueue.Count != 0)
    {
        Message msg = yourQueue.Dequeue();
        yield return new WaitWhileMessageArrives(() => msg.processed);
    }
}

希望有所帮助