Unity3D,错误GetItem(int 32)

时间:2016-03-17 17:16:27

标签: c# list unity3d

我创建了3个用于创建项目的脚本,将项目添加到列表和显示项目。 当我尝试将项目列入时,会发生此错误。

NullReferenceException:未将对象引用设置为对象的实例 charactersScript.GetItem(Int32 id)

错误在于行字符.Script.GetItem(Int32 id) 这是我的脚本

itemdatabese for item class

using UnityEngine;
using System.Collections;
using System;

public class itemDataBase : ScriptableObject
{    
    public int itemID;
    public int itemDamage;
    public string itemName;

    public itemDataBase(int _id, int _damage, string _name)
    {    
        itemID = _id;
        itemDamage = _damage;
        itemName = _name;
    }
}

技术脚本解锁项目并添加到列表

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class technologyScript : MonoBehaviour
{
    public int countID = 0;
    List<itemDataBase> item = new List<itemDataBase>();

    public void StoneSpear()
    {
        countID += 1;
        item.Add(new itemDataBase(countID, 7, "Stone Spear"));    
    }
}

和显示此项目的字符脚本

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;

public class charactersScript : MonoBehaviour
{  
    static public List<itemDataBase> _item;

    static public itemDataBase GetItem(int id)
    {  
        foreach (itemDataBase item in _item)
        {
            if (item.itemID == id)
            {
                return ScriptableObject.Instantiate(item) as itemDataBase;
            }
        }
        return null;
    }

    public void rightWeapon()
    {

        weaponID += 1;

        itemDataBase _item = GetItem(weaponID);
        if (_item != null)
        {
            Debug.Log(_item.id);
        }
    } 
}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您要在techScript中的一个List实例中添加new itemDataBase(),然后在您尝试循环使用 不同的 列表的{character> {{1}从未实例化并且为null并抛出异常。 List<itemDataBase> _item列表并不仅仅因为您使用static关键字声明它而自动共享其他列表的值。

将您的static设为公开。 试试这个:

List<itemDataBase> item

这假设techScript与此脚本位于同一个游戏对象上,如果没有,则需要GameObject.Find(correctObj)......