Unity:无法在Inspector中编辑公共Sprite [] []

时间:2018-06-11 14:54:47

标签: c# unity3d

每次我想用附带的脚本来玩我的游戏:

//...

    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;。但我在检查员身上找不到它。

我现在能做什么? 非常感谢你!

2 个答案:

答案 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中命名项目。