我正在我的SaveData类中初始化两个不同的布尔数组。调用Awake函数时,只剩下其中一个保持初始化状态。通过这个,我的意思是它保持其长度为17而另一个长度为11并且突然长度为0.超出长度的唯一区别是有效的是从本地枚举得到它的长度而另一个从另一个类枚举中获取它的长度。我可以在初始化行上设置一个断点,它将证明它首先初始化为11的长度(即枚举值是好的)。然而,当我进入唤醒功能时,它会神奇地回到0,而另一个阵列仍然是17.什么给出了?
更新: Unity中必定存在错误。我只是在工作数组的末尾添加了一个字母,任何人都没有使用这个字母,因为名称更改中没有错误,并且突然它现在也减少到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;
}
}
答案 0 :(得分:0)
最后!问题与检查员发挥作用。我的脚本附加到一个对象上,除了第一次将代码附加到对象外,它似乎并不关心初始化大小。所以没有工作的数组是我在附加脚本后添加的新数组,当我将脚本附加到对象时,完成工作的数组已经在代码中了。对象实例将采用新变量的默认值,但显然不是新数组的默认数组大小。那太糟糕了......
解决方案:在Awake / Start中初始化数组。当然,这意味着检查员无法控制它们,这在某些情况下可能会很糟糕。