Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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中,尝试从数组中获取Vector3坐标并将其设置为新变量。正确的语法是什么?_C#_Arrays_Unity3d_Transform - Fatal编程技术网

C# 在Unity中,尝试从数组中获取Vector3坐标并将其设置为新变量。正确的语法是什么?

C# 在Unity中,尝试从数组中获取Vector3坐标并将其设置为新变量。正确的语法是什么?,c#,arrays,unity3d,transform,C#,Arrays,Unity3d,Transform,我有一个游戏中所有衍生对象的列表。我试图搜索该列表,只找到标记为“Road Tag”的对象,获取它们的变换位置,并将其转换为新变量 如果我使用 Log(spawnedObject[i].transform.position 它实际上可以很好地打印出x,y,z坐标。但是我不知道如何将它们分配给一个新的Vector3变量。数组的语法似乎不同 我试过: roadCoordinates[i] = new Vector3(spawnedObjects[i].transform.position.x, sp

我有一个游戏中所有衍生对象的列表。我试图搜索该列表,只找到标记为“Road Tag”的对象,获取它们的变换位置,并将其转换为新变量

如果我使用

Log(spawnedObject[i].transform.position

它实际上可以很好地打印出x,y,z坐标。但是我不知道如何将它们分配给一个新的Vector3变量。数组的语法似乎不同

我试过:

roadCoordinates[i] = new Vector3(spawnedObjects[i].transform.position.x, spawnedObjects[i].transform.position.y, spawnedObjects[i].transform.position.z);

roadCoordinates[i]=spawnedObject[i].transform.position;
公共静态矢量3[]道路坐标;
公共静态无效FindPawnedRoads()
{
loopCount=spawnedObject.Count;
for(int i=0;i
我希望将变量设置为
道路坐标[I]
的矢量3坐标


我得到的是
NullReferenceException
。除非我打印
spokedobjects
,它在其中像我想要的那样打印坐标。

你必须初始化
roadCoordinates
数组,否则你会得到
NullReferenceException
错误。除此之外,你的逻辑没有问题。你可以通过添加
loopCount
赋值后的此行:

roadCoordinates=newvector3[loopCount];

如果不初始化数组,则会创建一个名为
roadCoordinates
的变量,但没有为此变量分配或引用内存。因此,它不会指向内存中的任何内容,当您尝试使用它时,它会说我无法引用任何内存块

正如您在问题中提到的,您有一个所有衍生对象的列表,您也可以将这些点存储在一个列表中,这样您就不必分配任何内存,只需向列表中添加元素即可

列出道路坐标=新建列表()

然后可以使用
roadCoordinates.add(spawnedObject[i].transform.position)添加元素

如果需要存储具有
道路标记的衍生对象的索引
,可以使用
字典

字典道路坐标=新字典()


然后可以添加元素,如
roadCoordinates.add(i,spawnedObject[i].transform.position)

您必须初始化
道路坐标
数组,否则会出现
NullReferenceException
错误。除此之外,您的逻辑正常。您可以通过在
loopCount
赋值后添加此行来解决此问题:

roadCoordinates=newvector3[loopCount];

如果不初始化数组,则会创建一个名为
roadCoordinates
的变量,但没有为此变量分配或引用内存。因此,它不会指向内存中的任何内容,当您尝试使用它时,它会说我无法引用任何内存块

正如您在问题中提到的,您有一个所有衍生对象的列表,您也可以将这些点存储在一个列表中,这样您就不必分配任何内存,只需向列表中添加元素即可

列出道路坐标=新建列表()

然后可以使用
roadCoordinates.add(spawnedObject[i].transform.position)添加元素

如果需要存储具有
道路标记的衍生对象的索引
,可以使用
字典

字典道路坐标=新字典()


然后您可以添加元素,如
roadCoordinates.add(i,spawnedObject[i].transform.position)
您可能应该使用array.push()(请参见:)而不是编写“roadCoordinates[i],因为此数组仍然是空的。通过使用“推”,您可以将新的位置/3D向量添加到数组的末尾,如果数组仍然是空的,这也会起作用。希望这对您有所帮助


PS:如果您首先将数组初始化为另一个答案所建议的某个长度,您将有很多空数组项,因为循环中的每个项都不是“道路标记”。

您可能应该使用array.push()(请参见:)而不是写“道路坐标[i],因为此数组仍然是空的。通过使用“推”,您可以将新的位置/3D向量添加到数组的末尾,如果数组仍然是空的,这也会起作用。希望这对您有所帮助


PS:如果您首先按照另一个答案的建议将数组初始化为某个长度,您将有很多空数组项,因为不是循环中的每个项都是“路标”。

在这种情况下,使用列表更好,因为我们从一开始就不知道将有多少对象

List<Vector3> roadCoordinates = new List<Vector3>();

...

roadCoordinates.Add(new Vector3(...));
列出道路坐标=新建列表();
...
道路坐标。添加(新矢量3(…);

是关于列表的教程。

在这种情况下使用列表更好,因为我们从一开始就不知道将有多少对象

List<Vector3> roadCoordinates = new List<Vector3>();

...

roadCoordinates.Add(new Vector3(...));
列出道路坐标=新建列表();
...
道路坐标。添加(新矢量3(…);

是关于列表的教程。

是的,正如Alexander所建议的,使用列表是一种方法。您不需要使用字典,因为您已经知道道路坐标列表将只包含标记“Road tag”的项目

public static List<Vector3> roadCoordinates = new List<Vector3>();

public static void FindSpawnedRoads()
{
    loopCount = spawnedObjects.Count;

    for (int i = 0; i < loopCount; i++)
    {
        if (spawnedObjects[i].tag == "Road Tag")
        {
            roadCoordinates.Add(new Vector3(spawnedObjects[i].transform.position.x, spawnedObjects[i].transform.position.y, spawnedObjects[i].transform.position.z));
        }

    }
}
公共静态列表道路坐标=新列表();
公共静态无效FindPawnedRoads()
{
loopCount=spawnedObject.Count;
for(int i=0;i