如何修改List <vector3>属性

时间:2017-08-15 14:31:42

标签: c# unity3d

我有一个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;

如果有人可以对新手表示同情并帮助我,那就太棒了。如果通常有更好的方法来完成相同的事情我也想知道,但我也想知道为什么这不起作用,以防同样的问题再次出现。

1 个答案:

答案 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)