Unity C#允许嵌入式阵列?

时间:2018-06-18 17:17:17

标签: c# arrays unity3d

我正在学习如何使用Json在出现连续错误时将数据保存到文件中,其" Nullreference,对象引用未设置为对象的实例"我开始认为我正在执行保存文件部分,但错误是我在某种程度上使用数组,所以我开始了一个新项目,我开始使用数组,没有任何使用Json,确实错误是在那里,所以我知道这有什么问题,但是我真的不知道是什么,我知道如何简单地初始化数组以及每个数组在使用之前必须如何初始化,但是在这种情况下由于某种原因出了问题,你能不能告诉我那是什么?

该场景非常简单,因为它的新项目只是以我在更大的项目中使用它们的方式来测试数组,所以它主要是一个包含几个高分表(它们的数组)的GameClass,这些表是由一个包含名称和点数组的类(HiScoreClass)制作,然后我只是初始化它并且出现错误,所以不需要进一步挖掘,你能告诉我这里有什么问题吗?非常感谢你的帮助,我完全迷失在这一点上。 (为了在一个项目中对此进行测试,我只是将代码附加到相机中,因此在场景中没有其他任何东西可以认为其他对象可能导致它)

using UnityEngine;
 using System.Collections;

 public class embed : MonoBehaviour
 {
     GameClass myGame;
     int i, j;
     void Awake ()
     {
         myGame = new GameClass();
         myGame.arrptnm = new HiScoreClass[10];
         for (i = 0; i < 100; i++)
         {
             myGame.arrptnm[i].pts = new int[10];
             myGame.arrptnm[i].names = new string[10];
             for (j = 0; j < 10; j++)
             {
                 myGame.arrptnm[i].pts[j] = i * j;
                 myGame.arrptnm[i].names[j] = "ASD";
             }
         }
     }

     void Update ()
     {

     }
 }

 [System.Serializable]
 class GameClass
 {
     [SerializeField]
     public HiScoreClass[] arrptnm;
 }
 [System.Serializable]
 class HiScoreClass
 {
     [SerializeField]
     public int[] pts;
     public string[] names;
 }

1 个答案:

答案 0 :(得分:1)

问题是您正在定义HiScoreClass个对象的数组,但是您并未将该数组中的元素初始化为HiScoreClass类的新实例。然后,当您尝试引用数组中项目的属性时,会得到NullReferenceException,如myGame.arrptnm[i].pts

要解决此问题,您可以在执行第一次迭代时将每个项目初始化为新实例(同时将100更改为10,因为这是我们为此声明的大小阵列):

        for (int i = 0; i < 10; i++)
        {
            // Initialize our array items
            myGame.arrptnm[i] = new HiScoreClass();

            // rest of code omitted...