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循环
有人能解释一下为什么会这样吗?我们能做些什么来弥补呢?我最初的想法是与对象本身的工作,但似乎我不能,所以我试着做一个副本。您确定该对象是SpecialItem类型吗?
如果对象不能被强制转换为该类型,"as"关键字将返回null。
实例化(myItem)的签名是什么?问题不在我提交给stackoverflow本身的代码中。
我有一个附加了SpecialItem脚本的物理对象。当我选择它到库存时,我使用了Destroy(gameObject)。
由于一些奇怪的原因,我仍然能够访问它的一些变量,如"纹理","数量"或"插槽"。但是当我试图访问'name'时,它崩溃了,因为对象已经被破坏了。
所以我替换了:
摧毁(gameObject);
gameObject.SetActive(假);