gpt4 book ai didi

c# - 在 Unity Coroutine 中等待事件?

转载 作者:行者123 更新时间:2023-12-05 03:12:35 29 4
gpt4 key购买 nike

所以我有一个 Unity 协程方法,其中有一些对象。这些对象表示从某处服务器收集的值,并在准备就绪时发送 Updated 事件。

我想知道在 Unity 的协程中等待所有值更新的最佳方法是什么。

public IEnumerator DoStuff()
{
foreach(var val in _updateableValues)
{
if (val.Value != null) continue;
else **wait for val.Updated to be fired then continue**
}
//... here I do stuff with all the values
// I use the WWW class here, so that's why it's a coroutine
}

做这样的事情最好的方法是什么?

谢谢!

最佳答案

没有内置的直接方法来等待事件本身,但您可以使用同步嵌套协程来等待事件设置的标志:

//Flag
bool eventHappened;

//Event subscriber that sets the flag
void OnEvent(){
eventHappened=true;
}

//Coroutine that waits until the flag is set
IEnumerator WaitForEvent() {
yield return new WaitUntil(eventHappened);
eventHappened=false;
}

//Main coroutine, that stops and waits somewhere within it's execution
IEnumerator MainCoroutine(){
//Other stuff...
yield return StartCoroutine(WaitForEvent());
//Oher stuff...
}

考虑到这一点,创建一个等待 UnityEvent 的通用协程很容易:

private IEnumerator WaitUntilEvent(UnityEvent unityEvent) {
var trigger = false;
Action action = () => trigger = true;
unityEvent.AddListener(action.Invoke);
yield return new WaitUntil(()=>trigger);
unityEvent.RemoveListener(action.Invoke);
}

关于c# - 在 Unity Coroutine 中等待事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199868/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com