初心者必見!現場レベルの「ゲーム制作講座PDF」を無料プレゼント中!▶

Unity Destroyの使い方 | オブジェクトを消すタイミング

Unity 基礎操作・設定

「弾を撃ち続けたら、だんだんゲームが重くなってきた」

Instantiateでオブジェクトを増やしたあと、不要になったものを消すのがDestroyです。
生成と削除はセットで覚えると、シーンがオブジェクトだらけになる事故を防げます。

この記事では、Destroyの基本構文、遅延削除、弾や敵の寿命管理、Instantiateとの組み合わせ、DestroyImmediateの注意点まで、実装しやすい形で整理します。

  • Instantiateで増やしたオブジェクトを、いつ消せばいいか分からない…
  • Destroyを書いたのに、Hierarchy上で消えないタイミングがある。
  • DestroyとDestroyImmediateの違いが分からず、エラーが出る。

この記事でわかること

  • Destroyの基本構文と削除タイミング
  • 遅延Destroyで寿命を付ける方法
  • 弾・敵・エフェクトの削除パターン
  • Instantiateとのセット運用の考え方
  • DestroyImmediateを使うべき場面と注意点
  • 初心者でも理解できる解説

\プログラミング未経験でも大丈夫!まずは1本作り切ろう/

初心者が最初に選ぶならコレ

Unity ノンフィールドRPG
+スレスパ風JRPG講座

★★★★★ (Unity6対応)

Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。

講座を見てみる \ゼロからでもスマホ対応RPGが作れる!/

憧れのアクションゲームに挑戦

Unity 2Dアクションゲーム
の作り方講座(ロックマン風)

★★★★★ (スマホ化・広告実装)

初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。

講座を見てみる \初心者でも本格ACTが完成する!/

3Dゲーム開発の入口はここ

ゼルダ風3Dアクションゲーム
の作り方講座

★★★★★ (スマホ化対応)

「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。

講座を見てみる \初心者でも全16回で3Dゲームが完成!/

Destroyとは|GameObjectをシーンから外す

Destroyは、指定したGameObjectやコンポーネントを、実行中にシーンから取り除く関数です。
見えなくなるだけでなく、更新対象から外れるため、増え続けたオブジェクトによる負荷を抑えられます。

もっとも基本的な書き方は次のとおりです。

Destroy(gameObject);

スクリプトがアタッチされているオブジェクト自身を消すときは、gameObjectを渡します。
別のオブジェクトを消すときは、その参照を渡します。

Destroy(other.gameObject);

削除はフレームの終わりに実行されます。
そのため、Destroyを呼んだ直後も、そのフレーム内ではオブジェクトがまだ存在しているように見えることがあります。

遅延Destroyで寿命を付ける

第2引数に秒数を渡すと、指定時間後に削除されます。
弾やエフェクトの「何秒で消える」処理に使います。

void Start
{
  // 生成から2秒後に消す
  Destroy(gameObject, 2f);
}

Instantiate直後に寿命を付ける例です。

GameObject bullet = Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
Destroy(bullet, 3f);

画面外に出たら消す、当たったら消す、といった条件付き削除と組み合わせると、実戦的な運用になります。

管理人
管理人

弾には「3秒で消える」を最初から付けておくと、当たり判定の実装前でもオブジェクトが溜まりにくくなります。
小さな習慣が、後のデバッグを楽にしてくれますよ。

弾・敵・エフェクトの削除パターン

用途ごとに、よく使う削除パターンを整理します。

用途 削除のタイミング
敵に当たった瞬間、または画面外・一定時間経過後にDestroy
HPが0になったとき、撃破演出のあとにDestroy
エフェクト Particleの再生終了後、または1〜2秒の遅延Destroyで確実に消す

衝突時に両方消す例です。

void OnTriggerEnter(Collider other)
{
  if (other.CompareTag("Enemy"))
  {
    Destroy(other.gameObject);
    Destroy(gameObject);
  }
}

敵のHP管理スクリプト側で消す場合は、ダメージ処理の最後に判定を入れます。

public void TakeDamage(int amount)
{
  hp -= amount;
  if (hp <= 0)
  {
    Destroy(gameObject);
  }
}

Instantiateとのセット運用

Instantiateで増やし、Destroyで減らす——この往復が、動的オブジェクト管理の基本です。
片方だけ覚えると、Play中にHierarchyの数が増え続ける現象が起きます。

生成と削除の流れ
  • STEP1
    プレハブをInstantiate

    弾・敵・エフェクトを必要なタイミングで生成します。
  • STEP2
    参照を保持(必要なら)

    生成直後に操作したい場合は戻り値を変数に入れます。
  • STEP3
    条件または時間でDestroy

    当たり判定、HP、画面外、遅延時間のいずれかで削除します。
  • STEP4
    Hierarchyの数を確認

    Play中にオブジェクト数が増え続けていないかチェックします。

親オブジェクトの下に弾をまとめて生成している場合、親ごとDestroyすれば子もまとめて消えます。
シーン切り替え時の一括削除にも使えます。

DestroyImmediateの注意点

DestroyImmediateは、その場で即座に削除します。
主にエディタ上の処理や、Editモード用のツールスクリプトで使われます。

通常のゲーム実行中(Playモード)ではDestroyを使います。
DestroyImmediateを乱用すると、想定外のタイミングで参照が切れ、エラーの原因になります。

  • Play中のゲームロジック → Destroy を使う
  • エディタ拡張でオブジェクトを即消したい → DestroyImmediate(Editモード限定が基本)
  • 「消したのに残っている」 → フレーム末削除の仕様。
    次のフレームで消える
管理人
管理人

ネットのサンプルに DestroyImmediate が出てきても、ゲームの Update 内では基本的に使わないでください。
Play中は Destroy が正解です。

よくあるつまずき

Destroyまわりで初心者がつまずきやすい点です。

  • 消えない → 別のオブジェクトを指定している、または親子関係で参照がずれている
  • NullReferenceException → Destroy後に同じフレームで操作している。
    フラグで「死亡済み」を管理する
  • 重くなる → Destroy忘れ。
    Instantiateのたびに寿命か当たり判定での削除をセットにする
  • Playを止めたら消えた → Play中の変更は停止で元に戻る。
    ビルドではDestroyが実際の削除になる

「倒したはずの敵に再度ダメージが入る」場合は、Destroy前にisDeadフラグを立てて、二重処理を防ぐ方法がシンプルです。

UIのイベント(ボタンクリックなど)でDestroyを呼ぶときも、同じルールです。
消したオブジェクトの参照を別スクリプトが持ち続けないよう、必要ならイベント登録を解除してから削除しましょう。

管理人
管理人

Hierarchyウィンドウでオブジェクト数を眺めるクセをつけると、「Destroy忘れ」にすぐ気づけます。
数字がじわじわ増えていたら、削除処理を見直しましょう。

記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう

知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。

Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座

  • Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
  • Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
  • 初心者でも迷わず進められる丁寧な解説構成
  • ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座

Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。

Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。

「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。

Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!

Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

Unity 2Dアクションゲームの作り方講座(ロックマン風)

  • ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
  • 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
  • スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
  • 敵AI15体・多彩なマップギミック・武器システムを完全実装
  • 完全オリジナルゲームをアセット不使用で素材提供付きで制作

Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。

全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。

「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。

スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!

ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

ゼルダ風3Dアクションゲームの作り方講座

  • ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
  • 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
  • スマホ化対応で実機で動かせるゲームが完成
  • アセットを使った実践的なゲーム開発手法が身につく
  • 画像・動画・全ソースコード公開の充実したサポート

ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。

全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。

「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。

初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!

まとめ

UnityのDestroyは、不要になったGameObjectをシーンから外すための基本APIです。
Destroy(gameObject)で即削除予約、第2引数で遅延削除ができ、Instantiateとセットで使うのが定石です。
Play中はDestroy、DestroyImmediateはエディタ用途と覚えておきましょう。

今日は弾プレハブを1つ生成し、3秒後に消える処理を足してみてください。
当たり判定がなくても、オブジェクトが溜まらない感覚が掴めます。

生成と削除を作品の中で実践したい方は、Unity入門の森の講座も参考になります。
シューティングやアクションを通して、寿命管理の設計を自然に学べます。
まずは「撃って、消える」まで動かしてみましょう。

コメント

タイトルとURLをコピーしました