我目前正在开发一个项目,我在其中为GameObject分配一个移动例程。 在上面提到的例程中,我分配了一些在例程循环中使用的变量。但是,一旦我在lambda表达式中访问任何这些变量,事情就会开始变得奇怪。
有趣的是,这似乎只发生在IEnumerator方法中。
使用VS 2017进行调试时,该变量不再列在locals窗口下,也不能进行检查。而且,在尝试检查变量时,Unity可能会崩溃。导致崩溃的是什么,我不确定,似乎缺少对变量的内存分配,导致从其他地方读取和写入相同的内存区域或类似内容。
我设法使用以下MonoBehaviour在新项目中重现此行为:
using System;
using System.Collections;
using UnityEngine;
public class Test : MonoBehaviour {
void Start () {
Foo2();
StartCoroutine(Foo());
}
void Foo2() {
object bar = null;
Action foobar = () => bar.ToString();
// when placing a breakpoint on the above line, no problem will occur
}
IEnumerator Foo() {
object bar = null;
Action foobar = () => bar.ToString();
// when placing a breakpoint on the above line, 'bar' will glitch and may crash unity
yield break;
}
}
我的Unity设置:
有人知道为什么会发生这种情况以及如何防止这种情况发生吗?