在获取后,Unity Object已经被销毁

时间:2013-03-09 20:59:48

标签: c# unity3d

我正在循环搜索列表中的特定对象,然后将其存储在全局变量中。但是当我尝试获取它时,它总是为空并且游戏崩溃。

SpecialItem pickedItem; // (global variable)

void OnGUI()
{
    for loop (all objects) // Idictionary<SpecialItem, string>
    {
        pickedItem = Instantiate(myItem) as SpecialItem;
        Debug.Log("this->" + pickedItem.name.ToString());  // ERROR
    }

}
  

Unity错误是:MissingReferenceException:类型的对象   'SpecialItem'已被销毁,但您仍在尝试访问   它

我认为这是因为foreach所以我用正常的循环替换它

有人能解释我为什么会这样吗?还有什么可以解决的?我最初的想法是使用对象本身,但似乎我不能这样,我试着复制。

2 个答案:

答案 0 :(得分:1)

您确定该对象的类型是SpecialItem吗?

如果无法将对象强制转换为该类型,则“as”关键字将返回null。

Instantiate(myItem)的签名是什么?

答案 1 :(得分:1)

问题不在我提交给stackoverflow本身的代码中。

我有一个物理对象,我附加了SpecialItem脚本。当我选择它到库存时,我正在使用Destroy(gameObject)。

出于某种奇怪的原因,我仍然能够访问其中一些变量,如'Texture','ammount'或'slots'。但是一旦我试图访问'name',它就会崩溃,因为该对象已经被破坏了。

所以我已经取代了:

销毁(游戏物体);

代表

gameObject.SetActive(假);

并且错误消失了。