在Unity中,在使用C#的同时,我初始化了一个列表:
public List<int> sequence = new List<int>();然而,我注意到后来使用列表时,它包含的元素比我预期的要多。我运行这段代码来调试它:
void Start () {
Debug.Log(sequence.Count);
sequence.Clear ();
Debug.Log(sequence.Count);
sequence.Add (0);
sequence.Add (1);
sequence.Add (2);
sequence.Add (3);
Debug.Log(sequence.Count);
}这给出了以下输出:
4
0
4我原本期望输出为0 0 4,因为创建的列表中应该包含0个元素。
由于某种原因,我还没能解决这个问题,这个列表是用4个元素创建的。
首先,任何人都能复制这个吗?其次,有没有人能搞清楚为什么会发生这种情况(用sequence.Clear()很容易就能解决)?
提前感谢!
发布于 2017-08-11 18:06:07
事实证明,无论出于什么原因,列表在检查器中的元素数量都设置为4。感谢大家的帮助。
发布于 2017-08-11 18:04:49
在Unity3D中,可序列化的公共字段等同于将[SerializeField]属性放在字段声明之前。如果这个字段是另一个可序列化类(通常是MonoBehaviour)的一部分,Unity将在对象中存储这些值。这些值由编辑器保存(当游戏不运行时),存储在磁盘上,并在每次打开项目时再次加载。在场景中实例化对象时,该对象还将具有公共/序列化变量的副本。
因此,要检查是否为该对象指定了值,请在编辑器中查找它所属的MonoBehaviour。不要寻找脚本。查找GameObject。向下滚动到检查器中显示sequence的位置。是否指定了值?如果是这样,在包含脚本的对象(组件)实例化之后,这些值将始终存在。
https://stackoverflow.com/questions/45632293
复制相似问题