上帝的名义我在这里做错了什么?每次我运行游戏时都会得到这个:" NullReferenceException:对象引用未设置为对象的实例"。我知道这意味着我只是不明白为什么会这么说?
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class Inventory : MonoBehaviour {
public static Inventory instance;
public List<InventoryItems> INVENTORY_ITEMS = new List<InventoryItems>();
void Awake(){
instance = this;
}
void Start(){
Debug.Log(instance.INVENTORY_ITEMS); // ERROR
Debug.Log(INVENTORY_ITEMS); // ERROR
}
}
[Serializable]
public struct InventoryItems
{
public string name;
}
答案 0 :(得分:2)
这是你应该编写这段代码的方法:
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
public class Inventory : MonoBehaviour {
public static Inventory instance;
public List<InventoryItems> INVENTORY_ITEMS;//do not initialize here
void Awake(){
instance = this;
INVENTORY_ITEMS = new List<InventoryItems>();//init here instead
}
void Start(){
Debug.Log(instance.INVENTORY_ITEMS); //no ERROR
Debug.Log(INVENTORY_ITEMS); //no ERROR
}
}
[Serializable]
public struct InventoryItems
{
public string name;
}
出现此错误的原因是,正在从编辑器(检查员)读取monobehaviour中公共可序列化成员的值,覆盖在唤醒之前分配给它的任何值。
我建议将列表访问器更改为内部,或将其设置为属性,或将其保持公开,但让检查员处理初始化并添加初始元素。
根据Programmer和Uri Popov的说法,你的原始代码肯定会在5.4及更高版本的单位上运行。