我来到这里是因为我对Unity和C#有一个奇怪的问题而我无法解决这个问题。
我有两个C#脚本:
ScriptA实例化一次并具有静态变量。它有一个静态列表,其中包含路径的点。此列表随时间变化。
ScriptB被多次实例化(它附加到敌人身上)。 在Start()上,设置一个等于当前ScriptA.listOfPoint的非静态列表
问题是这个非静态列表似乎是用ScriptA.listOfPoints
更新的。我只想在实例化ScriptB时有一个等于ScriptA.listOfPoints
状态的列表。
我在这里做错了什么?
提前致谢:)
静态
//ScriptA
public static List<int> listOfPoints = new List<int>();
public static void pathUpdate() //get called every 2secs
{
//listOfPoints is modified
}
敌人:
//ScriptB
private List<int> nonStaticListOfPoints = new List<int>();
void Start ()
{
nonStaticListOfPoints = ScriptA.listOfPoints;
}
答案 0 :(得分:6)
当您进行该分配时,您不会创建两个列表,而是两个保持对同一列表的引用的变量。
如果您需要列表元素的副本,可以执行this:
nonStaticListOfPoints = new List<int>(ScriptA.listOfPoints);
这将创建一个 new 列表并复制传递给构造函数的列表中的元素,因此nonStaticListOfPoints
现在可以独立于listOfPoints
进行操作。