尝试在 class 数组中设置 class 的值时出现 NullRefEr,为什么?
NullRefExc when trieing to set value of class in an array of classes, why?
我正在开发一款 2D space 射击游戏,我制作了一个无效的道具。
玩家的船附有 3 个游戏对象,3 把枪。 powerUp 脚本存储枪配置,当 PowerUp 与玩家碰撞时,玩家从 PowerUp 获取枪配置,然后销毁它。
PowerUp 会定期更改,因此需要 CyclePowers()
程序。
我将配置存储在创建 PowerUp 时执行的过程中。他们设置了适当的 classes.
的值
问题是,当它尝试设置值时抛出 NullReferenceExeption。
错误是:
NullReferenceException: Object reference not set to an instance of an object PowerUp.SetupGunLaserSettings () (at Assets/PowerUp.cs:131) PowerUp.Start () (at Assets/PowerUp.cs:30)
我认为问题在于 class 在尝试设置其值时不存在。为什么,我也不知道。
我是 C# 的初学者,所以我的假设可能是错误的。这是代码:
using UnityEngine;
using System.Collections;
public class PowerUp : MonoBehaviour {
// Use this for initialization
void Start () {
SetupGunLaserSettings();
SetupGunLaser2Settings();
powerType = powerCount;
InvokeRepeating("CyclePowers", 0.000001f, cycleRate);
}
public class gunSettings{
public string name;
//ETC
}
public class gunS{
public gunSettings gunSNose = new gunSettings();
//ETC
}
private gunS[] gunLaser = new gunS[3]; //powerType '0'
void SetupGunLaserSettings(){
for (int i = 0; i <= 2; i++) {
gunLaser[i].gunSNose.weaponActive = true; //This is where the exception is thrown.
//ETC
}
}
}
您声明了一个数组,但当您开始为其成员设置属性时它是空的。尝试创建您的 GunS
项:
for (int i = 0; i <= 2; i++)
{
gunLaser[i] = new GunS();
gunLaser[i].gunSNose.weaponActive = true;
顺便说一下,尝试将您的声明放在 class 的顶部。这就是人们寻找它们的地方。通过将它们散布在代码中,您会使任何试图理解您的代码的人感到困惑:)
我正在开发一款 2D space 射击游戏,我制作了一个无效的道具。
玩家的船附有 3 个游戏对象,3 把枪。 powerUp 脚本存储枪配置,当 PowerUp 与玩家碰撞时,玩家从 PowerUp 获取枪配置,然后销毁它。
PowerUp 会定期更改,因此需要 CyclePowers()
程序。
我将配置存储在创建 PowerUp 时执行的过程中。他们设置了适当的 classes.
的值问题是,当它尝试设置值时抛出 NullReferenceExeption。
错误是:
NullReferenceException: Object reference not set to an instance of an object PowerUp.SetupGunLaserSettings () (at Assets/PowerUp.cs:131) PowerUp.Start () (at Assets/PowerUp.cs:30)
我认为问题在于 class 在尝试设置其值时不存在。为什么,我也不知道。
我是 C# 的初学者,所以我的假设可能是错误的。这是代码:
using UnityEngine;
using System.Collections;
public class PowerUp : MonoBehaviour {
// Use this for initialization
void Start () {
SetupGunLaserSettings();
SetupGunLaser2Settings();
powerType = powerCount;
InvokeRepeating("CyclePowers", 0.000001f, cycleRate);
}
public class gunSettings{
public string name;
//ETC
}
public class gunS{
public gunSettings gunSNose = new gunSettings();
//ETC
}
private gunS[] gunLaser = new gunS[3]; //powerType '0'
void SetupGunLaserSettings(){
for (int i = 0; i <= 2; i++) {
gunLaser[i].gunSNose.weaponActive = true; //This is where the exception is thrown.
//ETC
}
}
}
您声明了一个数组,但当您开始为其成员设置属性时它是空的。尝试创建您的 GunS
项:
for (int i = 0; i <= 2; i++)
{
gunLaser[i] = new GunS();
gunLaser[i].gunSNose.weaponActive = true;
顺便说一下,尝试将您的声明放在 class 的顶部。这就是人们寻找它们的地方。通过将它们散布在代码中,您会使任何试图理解您的代码的人感到困惑:)