列表<列表<的Vector3>&GT;充满了重复

时间:2016-11-15 11:20:37

标签: c# unity3d

我编写了一个逐行读取文件的函数,计算位置向量并将这些向量添加到列表中。 这些bin/idea.vmoptions中的每一个都会添加到List<Vector3> positionPerFrame

虽然forEach循环List<List<Vector3>> _frame的每个循环中的每个positionPerFrame都不同,但只包括添加的最后_frames的重复项,基本上会覆盖以前添加的条目。

positionPerFrame

现在,当我打印List<string> frameData = new List<string> (); frameData.AddRange (rawDataFile.text.Split ("\n" [0])); _frames.Capacity = frameData.Count; foreach (string str in frameData) { positionPerFrame.Clear (); //previous code with calculations omitted positionPerFrame.Add (Vector3); // 15 times with 15 diff. vectors _frames.Add(positionPerFrame); } 时,它只是添加的最后_frames的400倍,但是,当我调用设置15点位置的函数时,它的工作原理。

3 个答案:

答案 0 :(得分:4)

您应该创建一个新实例,而不是在Vector3变量中清除和添加相同的实例,因为您现在一遍又一遍地重复使用同一个对象。您的foreach (string str in frameData) { positionPerFrame = new List<Vector3>(); positionPerFrame.Add (Vector3); _frames.Add(positionPerFrame); } 变量也可能是这样。

</english>

答案 1 :(得分:1)

那是因为你添加了一个引用。 在foreach内部做

positionPerFrame = new List<Vector3>();

答案 2 :(得分:1)

我无法看到您创建positionPerFrame的方式和位置,但怀疑以下内容: 您创建一次positionPerFrame并在循环中重复使用它。 然而,

_frames.Add(positionPerFrame);

不会将内容positionPerFrame复制到_frames,而是在_frames中存储对positionPerFrame的引用。 您每次都在循环中执行此操作,从而填充_frames并对同一个positionPerFrame对象进行多次引用。 同时,您在循环中更改positionPerFrame。由于_frames的所有元素都指向相同的positionPerFrame对象,因此您似乎正在更改_frames的所有内容。

解决方案:在循环中为positionPerFrame创建一个新对象。