NullRefExc在trieing中设置类数组中的类时,为什么?

时间:2017-08-15 21:00:19

标签: c# arrays class unity3d nullreferenceexception

我正在进行2D太空射击游戏,我做了一个无法正常工作的电源。

该玩家的船上附有3个游戏对象,3支枪。 powerUp脚本存储枪配置,当PowerUp与播放器发生冲突时,播放器从PowerUp获取枪配置,然后销毁它。

PowerUp正在改变,因此CyclePowers()程序。

我将配置存储在创建PowerUp时执行的过程中。他们设置了适当类的值。

问题是,当尝试设置值时会抛出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)

我认为问题是当它试图设置它的值时该类不存在。为什么,我不知道。

我是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               
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您声明了一个数组,但是当您开始在其成员上设置属性时它是空的。尝试创建GunS项:

for (int i = 0; i <= 2; i++) 
{
    gunLaser[i] = new GunS();
    gunLaser[i].gunSNose.weaponActive = true; 

顺便说一下,尝试将你的声明放在班级的顶部。那是人们寻找他们的地方。通过在代码中分散它们,您会混淆任何试图理解您的代码的人:)