0

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

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 所以我用普通的 for 循环替换它

有人可以解释一下为什么会这样吗?可以做些什么来解决?我最初的想法是使用对象本身,但似乎我做不到,所以我尝试制作一个副本。

4

2 回答 2

1

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

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

Instantiate(myItem) 的签名是什么?

于 2013-03-09T21:05:35.667 回答
1

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

我有一个物理对象,我将 SpecialItem 脚本附加到该对象上。当我将它选入库存时,我使用的是 Destroy(gameObject)。

出于某种奇怪的原因,我仍然能够访问其中的一些变量,例如“纹理”、“数量”或“插槽”。但是,一旦我尝试访问“名称”,它就崩溃了,因为该对象已经被破坏了。

所以我更换了:

销毁(游戏对象);

为了

gameObject.SetActive(false);

错误消失了。

于 2013-03-09T21:53:09.137 回答