Unity对象在获取之后就已经被销毁了

本文关键字:对象 获取 之后 Unity | 更新日期: 2023-09-27 18:03:04

我有一个循环从列表中搜索一个特定的对象,所以我把它存储在一个全局变量中。但当我试图取回它时,它总是空的,游戏崩溃了。

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
    }
}

统一错误是:MissingReferenceException:类型的对象"特殊物品"已被销毁,但您仍在尝试访问它。

我认为这是因为foreach,所以我把它替换为一个普通的for循环

有人能解释一下为什么会这样吗?我们能做些什么来弥补呢?我最初的想法是与对象本身的工作,但似乎我不能,所以我试着做一个副本。

Unity对象在获取之后就已经被销毁了

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

如果对象不能被强制转换为该类型,

"as"关键字将返回null。

实例化(myItem)的签名是什么?

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

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

由于一些奇怪的原因,我仍然能够访问它的一些变量,如"纹理","数量"或"插槽"。但是当我试图访问'name'时,它崩溃了,因为对象已经被破坏了。

所以我替换了:

摧毁(gameObject);

gameObject.SetActive(假);