Unity C#允许嵌入阵列吗?
我正在学习如何使用Json将数据保存到文件中,这时出现了一个连续的错误,它的“Nullreference,object reference未设置为对象的实例”,我开始认为我在保存文件部分做得很好,但错误出在我使用数组时,所以我开始了一个新项目,我开始以同样的方式使用数组,没有使用任何Json,而且确实存在错误,所以我知道这有点问题,但我真的不知道是什么,我知道如何初始化简单数组,以及每个数组在使用前必须如何初始化,但在这种情况下,由于某种原因出现了问题,你能告诉我那是什么吗 这个场景非常简单,因为它的新项目只是以我在更大的项目中使用它们的方式来测试数组,所以它主要是一个GameClass,它包含几个高分表(它们的一个数组),这些表由一个类(HiScoreClass)组成,这个类包含名称和点数的数组,然后我刚刚初始化了这个,错误出现了,所以不需要进一步挖掘,你能告诉我这里出了什么问题吗?非常感谢你的帮助,我完全迷失在这一点上了。(为了在一个项目中测试这一点,我只是将代码附加到相机上,这样在场景中就不会有其他物体会导致它)Unity C#允许嵌入阵列吗?,c#,arrays,unity3d,C#,Arrays,Unity3d,我正在学习如何使用Json将数据保存到文件中,这时出现了一个连续的错误,它的“Nullreference,object reference未设置为对象的实例”,我开始认为我在保存文件部分做得很好,但错误出在我使用数组时,所以我开始了一个新项目,我开始以同样的方式使用数组,没有使用任何Json,而且确实存在错误,所以我知道这有点问题,但我真的不知道是什么,我知道如何初始化简单数组,以及每个数组在使用前必须如何初始化,但在这种情况下,由于某种原因出现了问题,你能告诉我那是什么吗 这个场景非常简单,因
使用UnityEngine;
使用系统集合;
公共类嵌入:单行为
{
游戏类myGame;
int i,j;
无效唤醒()
{
myGame=新游戏类();
myGame.arrptnm=新的HiScoreClass[10];
对于(i=0;i<100;i++)
{
myGame.arrptnm[i].pts=new int[10];
myGame.arrptnm[i].names=新字符串[10];
对于(j=0;j<10;j++)
{
myGame.arrptnm[i].pts[j]=i*j;
myGame.arrptnm[i].名称[j]=“ASD”;
}
}
}
无效更新()
{
}
}
[系统可序列化]
类游戏类
{
[序列化字段]
公共HiScoreClass[]arrptnm;
}
[系统可序列化]
类他的核心类
{
[序列化字段]
公共技术秘书处;
公共字符串[]名称;
}
问题在于,您正在定义一个HiScoreClass
对象数组,但没有将该数组中的元素初始化为HiScoreClass
类的新实例。然后,当您尝试引用数组中某个项目的属性时,会得到一个NullReferenceException
,如myGame.arrptnm[i].pts
要解决此问题,您可以在执行第一次迭代时将每个项初始化为一个新实例(还可以将100
更改为10
,因为这是我们为此数组声明的大小):
for(int i=0;i<10;i++)
{
//初始化数组项
myGame.arrptnm[i]=新的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;
}
for (int i = 0; i < 10; i++)
{
// Initialize our array items
myGame.arrptnm[i] = new HiScoreClass();
// rest of code omitted...