Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组在我尝试添加更多内容时删除其以前的内容,使用C#unity_C#_Arrays_Unity3d - Fatal编程技术网

数组在我尝试添加更多内容时删除其以前的内容,使用C#unity

数组在我尝试添加更多内容时删除其以前的内容,使用C#unity,c#,arrays,unity3d,C#,Arrays,Unity3d,我最近开始在unity中编写C#来学习。还有很多代码我不懂,数组就是其中之一 我试图编写一个代码,找到对象,对它们进行计数,然后将它们的位置存储在Vector3数组中 GameObject[] ExistingObjects = GameObject.FindGameObjectsWithTag("Parts"); float CountObjects = ExistingObjects.Length; for (int i = 0; i < CountObjects; i++) {

我最近开始在unity中编写C#来学习。还有很多代码我不懂,数组就是其中之一

我试图编写一个代码,找到对象,对它们进行计数,然后将它们的位置存储在Vector3数组中

GameObject[] ExistingObjects = GameObject.FindGameObjectsWithTag("Parts");
float CountObjects = ExistingObjects.Length;

for (int i = 0; i < CountObjects; i++)
{
    float ObjectPositionX = ExistingObjects[i].transform.position.x;
    float ObjectPositionZ = ExistingObjects[i].transform.position.z;
    Vector3[] ObjectPositions = new[] { new Vector3(ObjectPositionX, 0, ObjectPositionZ) };
}
GameObject[]ExistingObjects=GameObject.FindGameObjectsWithTag(“部件”);
float CountObjects=ExistingObjects.Length;
对于(int i=0;i
当场景中只有一个对象时,一切都正常。当我添加更多时,它会从找到的第一个对象中获取第一个向量3,然后在将第二个向量3放入数组时将其删除。所以我剩下的(不管我在场景中放置了多少对象)就是ObjectPositions[0]


正如我已经说过的,我对C#编码相当陌生。

您正在循环中创建一个新变量
ObjectPositions
。您应该在循环外部创建此变量,并且只向循环内部的此变量添加
Vector3

这看起来像这样:

Vector3[] ObjectPositions = new Vector3[CountObjects];
for (int i = 0; i < CountObjects; i++)
{
    float ObjectPositionX = ExistingObjects[i].transform.position.x;
    float ObjectPositionZ = ExistingObjects[i].transform.position.z;
    ObjectPositions[i] = new Vector3(ObjectPositionX, 0, ObjectPositionZ);
}
Vector3[]ObjectPositions=新的Vector3[CountObjects];
对于(int i=0;i
您正在循环中创建一个新变量
ObjectPositions
。您应该在循环外部创建此变量,并且只向循环内部的此变量添加
Vector3

这看起来像这样:

Vector3[] ObjectPositions = new Vector3[CountObjects];
for (int i = 0; i < CountObjects; i++)
{
    float ObjectPositionX = ExistingObjects[i].transform.position.x;
    float ObjectPositionZ = ExistingObjects[i].transform.position.z;
    ObjectPositions[i] = new Vector3(ObjectPositionX, 0, ObjectPositionZ);
}
Vector3[]ObjectPositions=新的Vector3[CountObjects];
对于(int i=0;i
改用泛型

GameObject[] ExistingObjects = GameObject.FindGameObjectsWithTag("Parts");
float CountObjects = ExistingObjects.Length;
List<ObjectPositions> Vector3 = new List<ObjectPositions>();
for (int i = 0; i < CountObjects; i++)
{
    float ObjectPositionX = ExistingObjects[i].transform.position.x;
    float ObjectPositionZ = ExistingObjects[i].transform.position.z;
    Vector3.Add(new Vector3(ObjectPositionX, 0, ObjectPositionZ));
}
GameObject[]ExistingObjects=GameObject.FindGameObjectsWithTag(“部件”);
float CountObjects=ExistingObjects.Length;
列表向量3=新列表();
对于(int i=0;i
改用泛型

GameObject[] ExistingObjects = GameObject.FindGameObjectsWithTag("Parts");
float CountObjects = ExistingObjects.Length;
List<ObjectPositions> Vector3 = new List<ObjectPositions>();
for (int i = 0; i < CountObjects; i++)
{
    float ObjectPositionX = ExistingObjects[i].transform.position.x;
    float ObjectPositionZ = ExistingObjects[i].transform.position.z;
    Vector3.Add(new Vector3(ObjectPositionX, 0, ObjectPositionZ));
}
GameObject[]ExistingObjects=GameObject.FindGameObjectsWithTag(“部件”);
float CountObjects=ExistingObjects.Length;
列表向量3=新列表();
对于(int i=0;i
试试这个:

GameObject[] ExistingObjects = GameObject.FindGameObjectsWithTag("Parts");
Vector3[] ObjectPositions = new Vector3[ExistingObjects.Length]

for(int i = 0; i < ObjectPositions.Length; i++)
{
   ObjectPositions[i] = ExistingObjects[i].transform.position;
   ObjectPositions[i].y = 0;
}
GameObject[]ExistingObjects=GameObject.FindGameObjectsWithTag(“部件”);
Vector3[]ObjectPositions=新Vector3[ExistingObjects.Length]
for(int i=0;i
试试这个:

GameObject[] ExistingObjects = GameObject.FindGameObjectsWithTag("Parts");
Vector3[] ObjectPositions = new Vector3[ExistingObjects.Length]

for(int i = 0; i < ObjectPositions.Length; i++)
{
   ObjectPositions[i] = ExistingObjects[i].transform.position;
   ObjectPositions[i].y = 0;
}
GameObject[]ExistingObjects=GameObject.FindGameObjectsWithTag(“部件”);
Vector3[]ObjectPositions=新Vector3[ExistingObjects.Length]
for(int i=0;i
使用ArrayList或泛型,而不是应该在for循环之外声明ObjectPositions。然后,在其中添加每个元素。实际上,您在每次迭代时都要声明它,每次都会覆盖它。请使用ArrayList或泛型,而不是在for循环之外声明ObjectPositions。然后,在其中添加每个元素。实际上,您在每次迭代时都要声明它,每次都会覆盖它。@NitroFray如果这样做有效,您介意将此解决方案标记为答案吗?@NitroFray如果这样做有效,您介意将此解决方案标记为答案吗?