如何在Unity3D中处理队列
本文关键字:处理 队列 Unity3D | 更新日期: 2023-09-27 18:05:23
我已经在我的游戏中实现了System.Collections.Queue
来收集所有传入的TCP消息。
现在,我只是在Update()
中处理Queue
中最老的消息(如果队列不是空的)
然而,两个帧之间的时间通常比处理一条消息所花费的时间要长得多。
我想知道是否有一种方法可以在前一个消息完成时处理消息,而不会冻结游戏。
我已经尝试了协程,但它改变了什么,因为yield return null;
似乎等待下一帧(所以它就像一个更新())。
您可以实现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);
}
}
希望有所帮助