我对循环情况下的协程行为有疑问,请参阅以下代码摘录作为在 Unity C# 脚本上完成的示例:
void Start() {
StartCoroutine(FSM());
}
IEnumerator FSM() {
state="State1";
while (true) {
Debug.Log("State "+state);
yield return StartCoroutine(state);
}
}
IEnumerator State1() {
while (true) {
if (stateTransitionCond) {
state = "NextState";
yield break;
}
yield return null;
}
}
状态机工作正常,但是虽然当前状态是 Status1 ( stateTransitionCond==false
),但由于例程yield return null
的循环State1()
内部,我期望内部循环FMS()
也执行另一个迭代生成调试日志 'Debug.Log("State"+state); '。
换句话说,我期待大量的调试日志(当状态为 Status1 时,State1() 例程的每次迭代都有一个),但实际上在状态为 Status1 时只执行了 1 次。
所以我想我想念一些关于产量功能的东西,有没有人可以解释我这种行为?