为啥这会给我一个空引用异常? [复制]
Posted
技术标签:
【中文标题】为啥这会给我一个空引用异常? [复制]【英文标题】:Why is this giving me a Null Reference Exception? [duplicate]为什么这会给我一个空引用异常? [复制] 【发布时间】:2022-01-20 00:05:34 【问题描述】:我不知道为什么,但这是在抛出
NullReferenceException:对象引用未设置为对象的实例 GridSquareController.Update () (在 Assets/Scripts/GridSquareController.cs:53)
代码:
for (int i = 0; i < numOfPrefabs; i++)
System.Random rnd = new System.Random();
int squareValue = rnd.Next(1, 6);
gridBehaviour = spawnedPrefabs[i].GetComponent<GridBehaviour>();
gridBehaviour.gridValue = squareValue;
Debug.Log(gridBehaviour.gridValue);
我正在尝试在一系列预制件的脚本上设置一个值,我也在这段代码的另一部分初始化。
但是每次我按下激活这个 for 循环的键时,它都会抛出相同的错误。
预制件被初始化的部分:
void SpawnPrefabs()
//will create as many prefabs as I specify in the numOfPrefabs variable
if (numOfPrefabs > 0)
for (int i = 0; i < numOfPrefabs; i++)
GameObject newSpawnedPrefab;
//instantiates a new prefab
newSpawnedPrefab = Instantiate(gridTilePrefab, new Vector3(i, 0, 0), Quaternion.identity);
//parents the new prefab to the transform of the current object (just parenting it really)
newSpawnedPrefab.transform.SetParent(transform);
//adding the prefab to the array
spawnedPrefabs.SetValue(newSpawnedPrefab, i);
这也是我定义变量的地方
// the prefab I am instantiating into the gameworld
public GameObject gridTilePrefab;
public GridBehaviour gridBehaviour;
// an array containing all of the spawned prefabs
public GameObject[] spawnedPrefabs;
// the number of prefabs I want spawned calculated from the length of the array containing the prefabs
public int numOfPrefabs;
public bool Jeremy;
【问题讨论】:
这里有很多可能是错误的,但是您没有显示足够多的代码来实际找出您忘记初始化的内容...尝试在调试器中单步执行您的代码并找出您忘记初始化的内容。 不要将 new System.Random() 放入循环中。此外,unity 有一个内置的随机选项,可能对您更有效。 关于 Unity 随机类的提示听起来很有用,我会研究一下。 【参考方案1】:spawnedPrefabs 未启动。将 spawnedPrefabs= new GameObject[numOfPrefabs] 添加到您的代码中
void SpawnPrefabs()
//will create as many prefabs as I specify in the numOfPrefabs variable
if (numOfPrefabs > 0)
spawnedPrefabs= new GameObject[numOfPrefabs] ;
for (int i = 0; i < numOfPrefabs; i++)
GameObject newSpawnedPrefab;
//instantiates a new prefab
newSpawnedPrefab = Instantiate(gridTilePrefab, new Vector3(i, 0, 0), Quaternion.identity);
//parents the new prefab to the transform of the current object (just parenting it really)
newSpawnedPrefab.transform.SetParent(transform);
//adding the prefab to the array
spawnedPrefabs.SetValue(newSpawnedPrefab, i);
【讨论】:
很可能不是。由于它是公共的并且GameObject
是序列化类型,Unity Inspector/Serializer 通常会自动初始化该数组【参考方案2】:
可能是因为这条线。我不确定。
gridBehaviour = spawnedPrefabs[i].GetComponent<GridBehaviour>();
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 我正在查看该行以尝试查找问题。谢谢你的提示。我可能会尝试使用 foreach 循环。以上是关于为啥这会给我一个空引用异常? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当我在同一个模型中引用一个类时,为啥 Django 会给我一个 ValueError?