ニュース

Top  >   15. C#とMonoBehaviour  >   Q, Destroy()でオブジェクトを消した直後にアクセスしてエラーになる

Q, Destroy()でオブジェクトを消した直後にアクセスしてエラーになる

2026/03/19

メインコンテンツへスキップ
< すべてのカテゴリに戻る

A,結論

Destroy後にそのオブジェクトを使い続けないよう、参照と処理の流れを整理します。

原因 / 背景

Destroyは即座に全ての参照を消す命令ではありません。現在のUpdateループ後に破棄され、残った参照へのアクセスはMissingReferenceExceptionなどの原因になります。

実装 / 手順

  1. Destroyを要求したら、その処理からreturnし、以後のアクセスを止めます。
  2. 他のオブジェクトに保持した参照やイベント購読も解除します。
  3. 見た目や動作をすぐ止める必要がある場合は破棄前にSetActive(false)を使います。UnityEngine.Objectのnullチェックも行います。

サンプルコード

using UnityEngine;

public class DestroyObjectExample : MonoBehaviour
{
    [SerializeField] private GameObject targetObject;

    private void Start()
    {
        if (targetObject != null)
        {
            Destroy(targetObject, 2f);
        }
    }
}

※ 実機確認が必要な項目は、Editor だけで判断せず、対象デバイスでも必ず動作確認してください。

難易度:Level 2(初心者)
対象プラットフォーム:PC,Visual Studio,Unity
関連キーワード:C#,エラー,aca

Level 1-2 向けバナーLevel 3-5 向けバナー 1Level 3-5 向けバナー 2