C# Unity对象已在获取之后销毁

C# Unity对象已在获取之后销毁,c#,unity3d,C#,Unity3d,我有一个循环从列表中搜索特定对象,然后将其存储在全局变量中。但是当我试图获取它时,它总是空的,并且游戏崩溃 SpecialItem pickedItem; // (global variable) void OnGUI() { for loop (all objects) // Idictionary<SpecialItem, string> { pickedItem = Instantiate(myItem) as SpecialItem;

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

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
    }

}
SpecialItem pickedItem;//(全局变量)
void OnGUI()
{
for循环(所有对象)//Idictionary
{
pickedItem=将(myItem)实例化为SpecialItem;
Debug.Log(“this->”+pickedItem.name.ToString());//错误
}
}
Unity错误为:MissingReferenceException:类型为的对象 “SpecialItem”已被销毁,但您仍在尝试访问 它

我认为这是因为foreach,所以我用一个正常的for循环来代替它


有人能解释一下为什么会这样吗?我们能做些什么来修复呢?我最初的想法是处理对象本身,但似乎我做不到,所以我试着复制一份。

你确定对象是SpecialItem类型吗

如果对象不能转换为该类型,“as”关键字将返回null


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

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

我有一个物理对象,将SpecialItem脚本附加到该对象。当我使用销毁(gameObject)时,我将其挑选到清单中

出于某种奇怪的原因,我仍然能够访问它的一些变量,如“纹理”、“amount”或“slots”。但当我试图访问“name”时,它崩溃了,因为该对象已被销毁

因此,我替换了:

摧毁(游戏对象)

为了

gameObject.SetActive(false)


错误消失了。

我在pickedItem=之后尝试调试,但我遇到了同样的问题。。。使用as SpecialItem和(SpecialItem)cast之间有区别吗?我很确定该对象来自该类型,因为字典本身来自SpecialItem。区别在于(SpecialItem)cast将抛出一个异常,其中“as”将仅将该对象分配给null;下一行似乎已经为空,但在此之后,我可以使用myItem.Amount.toString()之类的属性,我认为我没有正确初始化对象。我该如何进行正确的初始化?对不起,我是unity的新手,实例不是本机函数吗?您正在请求它的Start()?我想问题可能只是我正在尝试获取一个物理对象,我在获取库存时销毁了它。。。所以,一旦我试图在库存中挑选它,它已经被销毁了,但出于某种原因,我仍然能够使用它的属性。也许我应该禁用它?