每次我想用附带的脚本来玩我的游戏:
//...
public Sprite[][] ObjectTypestobuy;
public Sprite[] Characters;
public Sprite[] Helmets;
public Sprite[] Weapons;
public Sprite[] Mantles;
public Sprite[] Shields;
void Start()
{
ObjectTypestobuy[0] = Characters; //this is the error line
ObjectTypestobuy[1] = Helmets;
ObjectTypestobuy[2] = Weapons;
ObjectTypestobuy[3] = Mantles;
ObjectTypestobuy[4] = Shields;
}
...它给我一个错误:NullReferenceException:
> Object reference not set to an instance of an object (wrapper
> stelemref) object:stelemref (object,intptr,object) Shop_Handler.Start
> () (at Assets/Shop_Handler.cs:88)
标记为错误的行是这一行:
ObjectTypestobuy[0] = Characters;
我认为问题是,因为它说我应该在Inspector中编辑public Sprite[][] ObjectTypestobuy;
。但我在检查员身上找不到它。
我现在能做什么? 非常感谢你!
月
答案 0 :(得分:2)
在数组中设置值之前,必须先创建数组。
void Start()
{
ObjectTypestobuy = new Sprite[5][10]; // for example
ObjectTypestobuy[0] = Characters; //this is the error line
ObjectTypestobuy[1] = Helmets;
ObjectTypestobuy[2] = Weapons;
ObjectTypestobuy[3] = Mantles;
ObjectTypestobuy[4] = Shields;
}
如果不创建数组,则无法在其中添加任何内容。你得到了null异常,因为你试图把东西放在一个不存在的对象中。
答案 1 :(得分:1)
不幸的是,您还没有实际初始化阵列。这种类型的数组称为" Jagged"阵列。
因此,答案在此页面here来自Microsoft。
int[][] jaggedArray = new int[3][];
然后使用初始化器,可以填充数组:
jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };
很不幸的是Unity没有对字典集进行序列化。考虑到这种限制,要完成我认为您尝试实现的目标的常见工作是执行以下操作:
using System;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public struct InventoryCollection
{
public string Name;
public List<Sprite> Sprites;
}
public class Inventory: MonoBehaviour
{
public List<InventoryCollection> ObjectTypesToBuy = new List<InventoryCollection>();
}
您现在可以注意到,现在您可以直接将项目输入Unity中的“检查器”窗口,并输入&#34; name&#34;为方便起见,field也会在Inspector中命名项目。