我有一个c#class for unity,它有一个名为points的List属性。 我宣称是这样的。
Public List<Vector3 > points{get; set;}
我想制作一个为每个元素添加Vector3的translate方法。我遇到的问题是在方法中值正确更新但在方法返回点之后不变。我想我正在修改一个点的副本,而不是实际的列表 这是我尝试过的:
我在名为newPoints的方法中创建了一个新的列表并执行了此操作。
public void translate(Vector3 vect)
{
List<Vector3> newPoints = new List <Vector3>();
foreach(Vector3 v in points)
{
newPoints. Add(v +vect) ;//vect is a Vector3 parameter
}
points =newPoints;
}
我也试过
int count = 0;
foreach(Vector3 v in points)
{
points[count] = v + vect;
count++;
}
points =newPoints;
如果有人可以对新手表示同情并帮助我,那就太棒了。如果通常有更好的方法来完成相同的事情我也想知道,但我也想知道为什么这不起作用,以防同样的问题再次出现。
答案 0 :(得分:0)
有两点需要注意:
points
应该在某处初始化(调用列表的构造函数)。public
不应该有资本&#39; P&#39; 这完全适用于我的电脑:
public List<Vector3> points{ get; set; }
private void Start()
{
points = new List<Vector3>(); // initialize the list
// Add dummy values to test
points.Add(new Vector3(1, 2, 3));
points.Add(new Vector3(4, 5, 6));
points.Add(new Vector3(7, 8, 9));
printPoints(); // display
translate(Vector3.one); // translate with (1,1,1)
printPoints(); // display again
}
public void translate(Vector3 vect)
{
// Just an old school for loop instead of foreach so you can modify points directly
for (int i = 0; i < points.Count; i++)
{
points[i] += vect;
}
}
public void printPoints()
{
foreach (Vector3 v in points)
{
Debug.Log(v);
}
}
打印:
(1.0,2.0,3.0)
(4.0,5.0,6.0)
(7.0,8.0,9.0)
(2.0,3.0,4.0)
(5.0,6.0,7.0)
(8.0,9.0,10.0)