【问题标题】:Unity C# allows for embedded arrays? [duplicate]Unity C# 允许嵌入数组? [复制]
【发布时间】:2018-06-18 17:17:17
【问题描述】:

当出现连续错误时,我正在学习如何使用 Json 将数据保存到文件中,它的“Nullreference, object reference not set to an instance of an object”,我开始认为我在做保存文件部分是的,但错误在于我以某种方式使用数组,所以我开始了一个新项目,我开始以同样的方式使用数组,没有使用任何 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;
 }

【问题讨论】:

  • 请发布整个异常堆栈。

标签: c# arrays unity3d


【解决方案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...

【讨论】:

  • 我明白了,非常感谢,我完全错过了那里的初始化,你让我免于持续的头痛 =)
猜你喜欢
  • 2016-11-19
  • 2015-08-02
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多