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