0

リストから特定のオブジェクトを検索するループがあるので、それをグローバル変数に保存します。しかし、フェッチしようとすると、常に null になり、ゲームがクラッシュします。

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) を使用していたインベントリにピックしたとき。

奇妙な理由で、「Texture」、「ammount」、「slots」などの変数の一部にアクセスできました。しかし、「名前」にアクセスしようとすると、オブジェクトがすでに破棄されていたため、クラッシュしました。

だから私は置き換えました:

破壊する(ゲームオブジェクト);

為に

gameObject.SetActive(false);

そしてエラーはなくなりました。

于 2013-03-09T21:53:09.137 に答える