UnityUnityメモ

Unityで触れたオブジェクトをn秒後に削除する方法【初心者向け】

Unity
  1. ① はじめに
  2. ② Unityプロジェクトの準備
    1. 1. 新しいシーンを作ろう
    2. 2. 地面(Plane)を作成する
    3. 3. Cubeを2つ作る
  3. ③ Rigidbodyを追加しよう
    1. 1. 下のCubeにRigidbodyを追加
    2. 2. 上のCubeにも同じように追加
  4. ④ Cubeを上下に配置しよう
    1. 1. Cubeの位置を確認しよう(下のCube)
    2. 2. Cube2を上に移動しよう(上のCube)
  5. ⑤ スクリプトの作成とアタッチ
    1. 1. スクリプトを作成しよう
    2. 2. スクリプトをCube2にアタッチしよう
  6. ⑥ スクリプトの記述方法
    1. 1. スクリプトを開こう
    2. 2. 以下のコードを入力しよう
    3. 3. コードの内容をかんたんに説明するよ!
  7. ⑦ 動作確認と調整
    1. 1. ゲームを再生してみよう
    2. 2. よくあるトラブルと確認ポイント
    3. 3. 時間を調整してみよう
  8. 触れた複数のオブジェクトをn秒後に一気に削除する
    1. 🎮 今回作る仕組み
  9. ① シーンの準備:Cubeを積み上げよう
    1. 1. Cubeを6個作って積み上げよう(二列三段)
    2. 2. Cubeの位置を調整しよう
    3. 3. Rigidbodyを追加しよう
    4. 4. タグ「Destroy」を設定しよう
  10. ② 白いCubeの配置
    1. 1. 高い位置に移動しよう
  11. ③ スクリプトの記述と解説
    1. 1. スクリプトを開こう
    2. 2. 以下のコードを入力しよう
    3. 3. コードの流れをかんたんに説明!
  12. ④ 実行してみよう!動作確認とアドバイス
    1. 1. ゲームを再生してみよう!
    2. 2. もしうまく動かない場合は…?
    3. 3. タイミングを調整したいときは?
    4. 🎉まとめ:演出の幅がグッと広がる!
  13. ⑤ 応用テクニック
    1. 1. 削除対象をタグで切り替える
    2. 2. 触れた順に削除する演出にしてみよう
    3. 3. エフェクトや音を追加して演出を強化!
    4. 4. UIでタイマー表示を作ってみる
    5. 💡応用まとめ
  14. よくある質問(FAQ)
    1. 関連記事:

① はじめに

こんにちは!今回は「触れたオブジェクトをn秒後に消す」という仕組みをUnityで作ってみます。

ゲームを作っていると、「プレイヤーが何かに触れたあと、ちょっと時間が経ってから消える」という演出をしたくなること、ありますよね?
たとえば、足元の床が落ちたり、スイッチを踏んだらオブジェクトが消えたり…そんなシーンにピッタリなテクニックです。

この記事では、Cube(キューブ)を2つ使って、上に乗ったら1秒後に下のCubeが壊れるという動きを作っていきます。

「衝突を判定してから、時間を数えて、対象を削除する」──
この流れを覚えておくと、いろんな場面で応用できるので、Unity初心者さんにもオススメです!

それでは、さっそく作っていきましょう!




② Unityプロジェクトの準備

さぁ、ここからは実際にUnityを使って準備していきましょう!

この記事では「Cubeの上にCubeが乗っていて、触れたら1秒後に下のCubeが消える」という仕組みを作っていきます。まずは、必要なオブジェクトをシーンに配置していきましょう。

1. 新しいシーンを作ろう

Unityを開いたら、新しいシーンを用意しましょう。メニューの「File」→「New Scene」を選ぶと、真っさらなシーンが作れます。

2. 地面(Plane)を作成する

オブジェクトを落とすために、まずは地面が必要ですね。

ヒエラルキー(Hierarchy)ウィンドウで右クリックして、
3D Object」→「Plane」を選びます。

これでシーンに広い地面ができました!

3. Cubeを2つ作る

次に、消える対象のCubeを2つ作成します。

同じように、ヒエラルキーで右クリックして、
3D Object」→「Cube」を2回選んで、2つのCubeを作りましょう。

作成したCubeには、わかりやすいように名前をつけておくと便利です。
例えば、

  • 下のCube → 「Cube」
  • 上のCube → 「Cube2」

と名前を変更しておくと、スクリプトのときにわかりやすくなります!

名前の変更は、ヒエラルキー上でオブジェクト名をゆっくり2回クリックすると編集できますよ。

これで、地面と2つのCubeの準備ができました!
次は、このCubeたちに**物理挙動(Rigidbody)**を追加していきますよー!やってみましょう!




③ Rigidbodyを追加しよう

オブジェクト同士がぶつかったり、落ちたりするためには「物理の力」をUnityに教えてあげる必要があります。
そこで登場するのが「Rigidbody(リジッドボディ)」というコンポーネントです!

このステップでは、さっき作った2つのCubeにRigidbodyを追加して、ちゃんと重力で落ちるように設定していきます。

1. 下のCubeにRigidbodyを追加

まずは、ヒエラルキーから「Cube」を選んでください。
次に、Inspector(インスペクター)ウィンドウの一番下にある「Add Component(コンポーネントを追加)」ボタンをクリックします。

検索バーに「Rigidbody」と入力して、出てきた「Rigidbody」をクリックすると、Cubeに物理の力が追加されます!

2. 上のCubeにも同じように追加

次に、ヒエラルキーで「Cube2」を選んで、同じように「Add Component」→「Rigidbody」を追加します。

これでCube2も、ゲーム開始と同時に重力で下に落ちるようになります。

Rigidbodyを追加しないと、オブジェクトは重力で落ちません。つまり、Cube2が下のCubeに触れることができないんです。なので、忘れずに両方に追加してくださいね!




④ Cubeを上下に配置しよう

さて、2つのCubeにRigidbodyを追加したら、次は位置を調整して、上から下へCube2が落ちていくようにセットしましょう!

このステップでは、「Cube2」をちょっと高い位置に置いて、下の「Cube」の上に落ちてくるようにします。

1. Cubeの位置を確認しよう(下のCube)

まずは下に置く「Cube」の位置から確認しましょう。

ヒエラルキーで「Cube」をクリックして、インスペクターの「Transform(トランスフォーム)」を見てみてください。
以下のように設定すると、ちょうどいい位置になりますよ。

Position(位置):
X: 0
Y: 0.5
Z: 0

Yを「0.5」にすることで、地面(Plane)の上に少しだけ浮いた状態になります(Cubeの大きさはデフォルトで1なので、ちょうど半分だけ見える感じです)。

2. Cube2を上に移動しよう(上のCube)

次に、Cube2の位置を調整しましょう。ヒエラルキーで「Cube2」をクリックして、同じくTransformを編集します。

Position(位置):
X: 0
Y: 2.5
Z: 0

Yの位置を「2.5」にすると、Cube2はCubeのちょうど上にあって、ゲーム開始と同時に自然に落ちてきます!

シーンビューで直接Cube2を選んで、上方向にドラッグしてもOKです。でも、数値で正確に配置しておくと、あとから修正しやすくておすすめですよ!




⑤ スクリプトの作成とアタッチ

ここまでで、オブジェクトの配置はバッチリですね!
次はいよいよ、「Cubeに触れたら1秒後に削除する」スクリプトを作っていきましょう!

ちょっとプログラミングっぽくなりますが、手順通りにやれば大丈夫です!一緒にやっていきましょう!


1. スクリプトを作成しよう

まずは新しいスクリプトファイルを作ります。

プロジェクトウィンドウを右クリック → 「Create(作成)」 → 「C# Script」を選んでください。

作成されたスクリプトの名前を「CubeDelete」に変更します。

※ 名前はあとでスクリプトの中でも使うので、必ず正確に「CubeDelete」と入力してくださいね!


2. スクリプトをCube2にアタッチしよう

次に、この「CubeDelete」スクリプトを上のCube(Cube2)にくっつけます。

やり方はとってもカンタン!

作成したCubeDeleteスクリプトをドラッグして、Cube2にドロップするだけです!

ヒエラルキーでCube2を選んで、インスペクターの下のほうに「CubeDelete」というスクリプトが表示されていればOKです!

Cube2にスクリプトがアタッチされていないと、処理が動かないので注意!
ドラッグ&ドロップで簡単にアタッチできるので、ぜひ覚えておきましょう!




⑥ スクリプトの記述方法

さぁ、いよいよ今回のメインとなる「スクリプトの中身」を書いていきましょう!

このステップでは、「Cubeに触れてから1秒後に、そのCubeを削除する」しくみを作ります。


1. スクリプトを開こう

まず、プロジェクトウィンドウにある「CubeDelete.cs」をダブルクリックして開いてください。
Visual Studioなどのエディターが起動して、コードを書く画面が出てきます。


2. 以下のコードを入力しよう

開いたら、中のコードを以下のように書き換えてみましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeDelete : MonoBehaviour
{
    private float time;
    private bool isTouch;
    private GameObject destroyObj;

    void Start()
    {
        time = 1f;         // 削除までの待ち時間(秒)
        isTouch = false;   // 最初は触れていない状態
    }

    void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.name == "Cube")
        {
            destroyObj = other.gameObject; // 触れたCubeを保存しておく
            isTouch = true;                // 接触フラグをONに
        }
    }

    void Update()
    {
        if (isTouch)
        {
            time -= Time.deltaTime;  // 毎フレーム少しずつ時間を減らす
            if (time <= 0)
            {
                Destroy(destroyObj); // 時間が0になったらオブジェクトを削除!
            }
        }
    }
}

3. コードの内容をかんたんに説明するよ!

  • Start():ゲームが始まったときに呼ばれる処理です。ここで、タイマーの初期値(1秒)と「まだ触れていないよ」という状態をセットしています。
  • OnCollisionEnter():ほかのオブジェクトとぶつかったときに呼ばれる関数です。Cubeとぶつかったら、そのCubeを記録して、削除準備をはじめます。
  • Update():毎フレーム実行される関数。1秒カウントしたら、CubeをDestroy()で削除しています!

💡ワンポイントアドバイス!
other.gameObject.name == "Cube" の部分は、「Cube」という名前のオブジェクトにだけ反応するようにしています。
もし他のオブジェクト名を使っているなら、ここも合わせて変更してくださいね!

これでスクリプトは完成です!
次は、ゲームを再生して、ちゃんと動くかどうか確認してみましょう!




⑦ 動作確認と調整

スクリプトの記述も終わったので、さっそくゲームを再生して動作チェックしてみましょう!

うまくいけば、Cube2が落ちてCubeに触れたあと、1秒後に下のCubeが消えるようになります。ワクワクですね!


1. ゲームを再生してみよう

画面上の中央にある「▶(再生ボタン)」をクリックすると、ゲームがスタートします!

Cube2が上から落ちてきて、下のCubeに**ポンッ!**と当たったあと、1秒待って…
スッとCubeが消える!

この動きが確認できたら大成功です!


2. よくあるトラブルと確認ポイント

もしうまく動かない場合は、以下をチェックしてみてください:

Cube2にスクリプトがちゃんとアタッチされているか?
→ ヒエラルキーでCube2を選び、インスペクターに「CubeDelete」が表示されていればOK!

Cubeの名前が “Cube” になっているか?
→ スクリプトでは「Cube」という名前を条件にしているので、違っていると反応しません。

Rigidbodyが両方のCubeに追加されているか?
→ 追加されていないと、物理的な接触が起きません。

Cube同士の位置がちゃんと重なるように配置されているか?
→ Cube2がCubeの真上にあるか、もう一度位置をチェックしてみてください。


3. 時間を調整してみよう

「1秒じゃ短い!」という場合は、スクリプトの time = 1f; の部分を変更するだけでOK!

例えば:

time = 3f; // 3秒後に削除される


このようにすると、「Cubeに触れて3秒後に消える」という風に調整できます。
自分のゲームに合った時間に変えて、いろいろ試してみてくださいね!




触れた複数のオブジェクトをn秒後に一気に削除する

ここまででは、「触れたオブジェクトを1秒後に削除する」方法を学びましたよね。
そこからもう一歩ステップアップしてみましょう!

複数のオブジェクトに触れたら、1秒後にまとめて全て削除する方法を紹介します。

しかも、オブジェクトには「Destroy」というタグを付けて、スクリプト内でリスト(List)に追加して、一気に消すというテクニックを使います!


🎮 今回作る仕組み

  • カラフルなCubeを二列三段で積み上げておきます
  • 上から白いCubeを落とします
  • 白いCubeが色付きのCubeに触れるたびにリストに追加
  • 1秒後に、触れたすべてのCubeを一斉に削除!

この方法は、ゲームで「まとめて敵を倒す演出」や、「特定のブロックだけ消すギミック」などにも応用できます✨
Unity初心者の方にもわかりやすいように、ひとつひとつ丁寧に解説していくので安心してくださいね!

それでは、まずはシーンの準備から始めていきましょう♪




① シーンの準備:Cubeを積み上げよう

それではさっそく、Unityのシーンにオブジェクトを並べていきましょう!

今回は「カラフルなCubeを二列三段で積み上げて」、そこに白いCubeを落とすという構成にします。


1. Cubeを6個作って積み上げよう(二列三段)

次に、Cubeを6つ作って「二列三段」に並べていきます。

ヒエラルキーで
右クリック →「3D Object」→「Cube」 を選んで、まず1個作ります。

その後、Ctrl+D(Windows)または Cmd+D(Mac) を押すと、コピーができます。これを6回くり返して、合計6個のCubeを作りましょう。


2. Cubeの位置を調整しよう

それぞれのCubeを以下のような位置に移動して、「二列三段」の形に配置します。

名前X位置Y位置Z位置
Cube1-0.50.50
Cube2-0.51.50
Cube3-0.52.50
Cube40.50.50
Cube50.51.50
Cube60.52.50

Y位置を1ずつ上げることで、ちょうど積み上がる感じになります!


3. Rigidbodyを追加しよう

6つすべてのCubeに、**Rigidbody(リジッドボディ)**を追加します。
これは物理挙動(落ちる・ぶつかる)を有効にするために必要です!

1つずつ選択して、インスペクターで「Add Component」→「Rigidbody」を追加しましょう。


4. タグ「Destroy」を設定しよう

この6つのCubeには、「Destroy」というタグを付けておきます。

  1. Cubeを1つ選択
  2. インスペクター上部の「Tag」→「Add Tag…」をクリック
  3. 「+」を押して新しいタグ「Destroy」を作成
  4. 6つすべてのCubeに、タグ「Destroy」を設定する

タグを使うことで、スクリプト内で「このCubeたちだけ削除する」というふうに選択的に処理できるようになります!

これでシーンの準備は完了です✨
次は、白いCubeを作って上に乗せる作業に進みましょう!




② 白いCubeの配置

続いて、色付きのCubeたちの上に落とす白いCubeを配置していきましょう!

このCubeが、下のCubeたちにぶつかって、n秒後にまとめて削除するきっかけになります。


1. 高い位置に移動しよう

前に作成した、Cubeを少し高いところに配置しましょう。
インスペクターで「Transform」のPositionを以下のように設定してみてください:

X: 0  
Y: 5
Z: 0

この位置にすると、落下して、下の色付きCubeにぶつかっていく流れになります!

これで、ぶつかる準備ができました!

次は、この白いCubeに「DestroyObject.cs」というスクリプトを作成&アタッチして、触れたCubeをリストに入れて削除する仕組みを作っていきましょう!




③ スクリプトの記述と解説

それでは、いよいよスクリプトの中身を書いていきましょう!

このステップでは、触れたオブジェクトをリストに追加して、1秒後にまとめて削除するスクリプトを完成させます。

ちょっと難しそうに見えるかもしれませんが、ゆっくり進めていけば大丈夫です!一緒にやってみましょう!


1. スクリプトを開こう

まず、プロジェクトウィンドウの「CubeDelete.cs」をダブルクリックして開いてください。
Visual Studioなどのエディターが開きます。


2. 以下のコードを入力しよう

開いたスクリプトを、次のように書き換えてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeDelete : MonoBehaviour
{
    public List<GameObject> myList = new List<GameObject>();  // ぶつかったオブジェクトをためておくリスト
    private float time;   // タイマー
    private bool isTouch; // 接触フラグ

    void Start()
    {
        time = 1f;        // 削除までの時間を1秒に設定
        isTouch = false;  // 最初は触れていない状態
    }

    void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.tag == "Destroy")  // タグが「Destroy」のオブジェクトに触れたら
        {
            myList.Add(other.gameObject);       // リストに追加!
            isTouch = true;                     // 削除のカウント開始
        }
    }

    void Update()
    {
        if (isTouch)
        {
            time -= Time.deltaTime;  // 毎フレーム時間を減らす
            if (time <= 0)
            {
                for (int i = 0; i < myList.Count; i++)  // リストの中身をすべてループして
                {
                    Destroy(myList[i]);                // ひとつずつ削除!
                }

                myList.Clear();     // リストの中身を空にする
                isTouch = false;    // フラグを戻しておく
                time = 1f;          // タイマーも初期化
            }
        }
    }
}

💡コードを書くのが苦手だったり、「もっとカンタンにゲームのロジックを作りたい!」と思った方へ…

✅おすすめ:PlayMaker
コードなしでゲームの動きを組み立てられるビジュアルスクリプティングツールです!

👉 PlayMakerをAsset Storeでチェックする

Unity初心者さんにもやさしいUIで、複雑なロジックもドラッグ&ドロップで作れますよ!


3. コードの流れをかんたんに説明!

  • Start():最初にタイマーとフラグを初期化しています。
  • OnCollisionEnter():タグが「Destroy」のオブジェクトに触れたときだけ、リストに追加します。
  • Update():毎フレーム実行される部分。1秒たったら、リストにたまったオブジェクトを全部まとめて削除します!

「Destroy」というタグがついたCubeしか削除されないように条件を設定しています。
そのおかげで、他のオブジェクトは影響を受けずに残るという便利な仕組みになっているんです!




④ 実行してみよう!動作確認とアドバイス

スクリプトもばっちり書けたし、オブジェクトの配置もOK!
それではいよいよ、ゲームを再生して動きを確認してみましょう!

ちゃんと複数のCubeが、1秒後にまとめて「バシュッ!」と消えてくれたら大成功です!


1. ゲームを再生してみよう!

画面上部にある「▶(再生ボタン)」をクリックして、ゲームを実行してみましょう!

  • 白いCube(TriggerCube)が上から落ちて…
  • 下のカラフルなCubeにぶつかると…
  • 1秒後に 複数のCubeが一気に消える!

うまく動いたら、おめでとうございます!🎉
Unityで複数オブジェクトの管理&削除ができるようになりました!


2. もしうまく動かない場合は…?

うまく削除されないときは、以下のポイントをチェックしてみてください:

タグが正しく設定されているか?
→ 削除されるCubeすべてに「Destroy」というタグが付いているか確認!

スクリプトが白いCubeにアタッチされているか?
→ TriggerCubeのインスペクターに「DestroyObject (Script)」が表示されていればOK!

Rigidbodyが全てのCubeに追加されているか?
→ Rigidbodyがないと接触判定が起きません。忘れがちなので注意!

スクリプト名とクラス名が一致しているか?
→ スクリプトファイル名が「DestroyObject.cs」で、クラス名も public class DestroyObject になっていることを確認!


3. タイミングを調整したいときは?

もし、削除までの時間を変えたい場合は、スクリプト内の time = 1f; の部分を変更しましょう。

time = 2f;  // 2秒後に削除

このようにするだけで、待ち時間を自由に調整できます!


🎉まとめ:演出の幅がグッと広がる!

この仕組みを使えば、例えば:

  • 敵キャラをまとめて倒す演出
  • 特定のギミックでブロックを一掃する
  • タグを使って対象を限定する演出

など、ゲームの面白さをグッと引き立てる演出に応用できます!




⑤ 応用テクニック

基本の仕組みはバッチリ理解できたと思います!
ここからは、ちょっとだけレベルアップして「応用的な使い方」を紹介していきます!

ゲームの演出やギミックをより面白くするヒントとして、ぜひ参考にしてくださいね!


1. 削除対象をタグで切り替える

今のスクリプトでは、「Destroy」というタグがついたオブジェクトだけを削除するようになっています。

でも、もし「赤いCubeだけ削除したい」「特定の種類だけ反応させたい」なんてときは、タグを分けて条件分岐してみましょう!

if (other.gameObject.tag == "Enemy")
{
myList.Add(other.gameObject);
}

タグを「Enemy」や「Block」などに変えることで、削除対象を限定できます。
いくつかタグを使い分けて、「敵だけまとめて倒す」「特定のギミックだけ壊す」みたいな使い分けもできちゃいます!


2. 触れた順に削除する演出にしてみよう

今のスクリプトは、リストに入ったオブジェクトを一気に全部削除していますよね。
これを「1個ずつ、順番に削除する」ようにすると、連鎖的に崩れていく演出ができます!

以下のように、Coroutine(コルーチン) を使えばOKです:

IEnumerator DeleteInOrder()
{
foreach (GameObject obj in myList)
{
Destroy(obj);
yield return new WaitForSeconds(0.5f); // 0.5秒ごとに削除
}

myList.Clear();
isTouch = false;
time = 1f;
}

そして Update() の中で、 StartCoroutine(DeleteInOrder()); を呼び出せば、順番削除がスタートします!


3. エフェクトや音を追加して演出を強化!

削除するときに、「パッ!」と光ったり、「ドン!」と音が鳴ったりすると、見た目の満足度がグッとアップしますよね!

例えば、削除直前にエフェクトを表示するなら、こんな感じ:

Instantiate(explosionEffect, obj.transform.position, Quaternion.identity);
Destroy(obj);

音を鳴らしたいときは AudioSource.PlayClipAtPoint() を使うのが簡単です。

💡もっと本格的でプロっぽいエフェクトを使いたい方は、
👉 Ultimate VFX という超人気アセットがおすすめです!
爆発・炎・魔法など、すぐに使えるVFXがたくさん入っていて、演出のクオリティが一気にアップします✨


4. UIでタイマー表示を作ってみる

「あと◯秒で消えるよ!」というカウントダウンを画面に表示すると、プレイヤーへの緊張感や分かりやすさがアップします!

UnityのUI(TextやTextMeshPro)と連携させて、timeの値をテキストに表示すればOK!
次のステップとしてぜひチャレンジしてみてください♪


💡応用まとめ

応用内容できること例
タグの使い分け敵・ブロック・ギミックなど種類ごとに削除可能に
順番に削除(コルーチン)崩れるような自然な演出
エフェクトや音の追加リアルで迫力ある削除表現が可能に
タイマーをUI表示プレイヤーにわかりやすいカウントダウン演出

ここまでできれば、もう初心者卒業レベルです✨
応用テクニックを自分なりに組み合わせて、より楽しいゲームを作ってみてくださいね!




よくある質問(FAQ)

Q
Cubeが一部しか消えないのはなぜ?
A

タグが正しく設定されていない可能性があります。「Destroy」タグをすべての対象オブジェクトにつけてください。

Q
削除のタイミングを変えるには?
A

time = 1; の部分を変更することで、秒数を調整できます。たとえば time = 2; にすれば2秒後に削除されます。

Q
同じオブジェクトが何回もリストに入ってしまいませんか?
A

OnCollisionEnter で同じオブジェクトが何度も追加される場合は、重複チェックを入れる方法もあります。必要に応じて応用してみましょう。

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