c# - 在 Unity 中,尝试从数组中获取 Vector3 坐标并将它们设置为新变量。什么是正确的语法?
问题描述
我有一个游戏中所有生成对象的列表。我正在尝试搜索该列表以仅查找标记为“Road Tag”的对象,获取它们的变换位置,并将其转换为新变量。
如果我使用
Debug.Log(spawnedObjects[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] = spawnedObjects[i].transform.position;
public static Vector3[] roadCoordinates;
public static void FindSpawnedRoads()
{
loopCount = spawnedObjects.Count;
for (int i = 0; i < loopCount; i++)
{
if (spawnedObjects[i].tag == "Road Tag")
{
//This prints perfectly
Debug.Log(spawnedObjects[i].transform.position);
//This gives me NullReferenceException
roadCoordinates[i] = new Vector3(spawnedObjects[i].transform.position.x, spawnedObjects[i].transform.position.y, spawnedObjects[i].transform.position.z);
Debug.Log(roadCoordinates[i]);
}
}
}
我希望将变量设置为的 Vector3 坐标roadCoordinates[i]
。
我反而得到NullReferenceException
. 除非我打印SpawnedObjects
它打印我想要的坐标。
解决方案
您必须初始化roadCoordinates
数组,否则您会收到NullReferenceException
错误消息。除此之外,你的逻辑没问题。loopCount
您可以通过在分配后添加此行来解决此问题:
roadCoordinates = new Vector3[loopCount];
当您不初始化数组时会发生什么,您创建了一个名为roadCoordinates
但没有为此变量分配或引用的内存的变量。因此,它不指向内存中的任何内容,当您尝试使用它时,它说我无法引用任何内存块。
正如您在问题中提到的,您有一个所有生成对象的列表,您也可以将这些点存储在一个列表中,然后您不必分配任何内存,您只需将元素添加到列表中即可。
List<Vector3> roadCoordinates = new List<Vector3>()
然后你可以使用添加元素roadCoordinates.Add(spawnedObjects[i].transform.position)
如果您需要存储具有 a 的衍生对象的索引,Road Tag
您可以使用 aDictionary
Dictionary<int, Vector3> roadCoordinates = new Dictionary<int, Vector3>()
然后你可以添加像roadCoordinates.Add(i,spawnedObject[i].transform.position)
推荐阅读
- angular - 在 Docker 中构建和运行 ASP.Net Core 3.1
- c# - 如何将元素添加到 List 类型的属性
? - swift - 为什么这些自动布局约束不调整这个 UILabel 的大小?
- r - 如何在 R 中为单独的函数指示不仅是分隔符,而且是它的位置(就像你可以在 SQL 中做的那样)?
- python - Python3 beautifulsoup 不解析任何东西
- image - 如何从压缩表示(RNN)中显示图像?
- android - 解析sdk android studio中的Jar文件
- throttling - django 石墨烯速率限制(节流)
- http - HttpGet, HttpPost abort() 方法是否会中止请求,即使建立连接需要更多时间
- r - 使用 for 循环计算摄入量