【发布时间】:2017-06-10 16:58:30
【问题描述】:
我正在我的 SaveData 类中初始化两个不同的布尔数组。当调用 Awake 函数时,其中只有一个保持初始化状态。通过这个,我的意思是它保留了它的长度 17 而另一个失去了它的长度 11 并且突然变成了 0 的长度。除了长度之外的唯一区别是,一个有效的是从本地枚举中导出它的长度,而另一个正在从另一个类枚举中得出其长度。我可以在初始化行放一个断点,它会证明它首先初始化为11的长度(即枚举值是好的)。然而,当我到达 Awake 函数时,它神奇地回到了 0,而另一个数组仍然是 17。这是什么原因?
更新: Unity 中一定有 bug。我只是在工作数组的末尾添加了一个字母,任何人都没有使用它,这可以从名称更改中没有错误得到证明,突然之间,它现在也被减小到 0 的大小。所以......现在呢?
简化代码:
[System.Serializable]
public class SaveData : MonoBehaviour {
public static SaveData saveData;
public bool[] dumbArray = new bool[(int)ExternalClass.ExternalEnum.LengthViaLastElement]; // 11
public bool[] goodArray = new bool[(int)LocalEnum.LengthViaLastElement]; // 17
...
public void Awake()
{
foreach (bool i in goodArray) Debug.Log(i); // prints 0 to 16
foreach (bool i in dumbArray) Debug.Log(i); // prints nothing
if (saveData == null) saveData = this;
}
}
【问题讨论】:
-
是持续行为还是随机发生?如果问题持续存在,我怀疑数组分配可能在您的代码中的某处出错。在调用 Awake(...) 函数之前将代码发布到您正在触摸的 dumbArray 和 goodArray。
-
这很奇怪,在叫醒之前我不会碰它们。但这是一个长期存在的问题。
标签: c# arrays unity3d initialization