我创建了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);
}
}
}
有什么建议吗?
答案 0 :(得分:0)
您要在techScript中的一个List实例中添加new itemDataBase()
,然后在您尝试循环使用 不同的 列表的{character> {{1}从未实例化并且为null并抛出异常。 List<itemDataBase> _item
列表并不仅仅因为您使用static关键字声明它而自动共享其他列表的值。
将您的static
设为公开。
试试这个:
List<itemDataBase> item
这假设techScript与此脚本位于同一个游戏对象上,如果没有,则需要GameObject.Find(correctObj)......