Developer

【初心者Unity】Destroyを具体例付きで解説
2021.01.12
Lv1

【初心者Unity】Destroyを具体例付きで解説


Destroy()とは

Destroyとは日本語に翻訳したまんま、「破壊する」メソッドです。物騒なメソッドですよね(笑)
いったい何を破壊するのでしょうか。。。それはズバリ!オブジェクトです。
ゲーム中の任意のタイミング・条件でオブジェクトを削除することができます。


実際に使ってみる

今回はかなりイメージしやすいとは思いますが、実際にスクリプトを書いてより深くご理解いただきたいと思います。
こちらがDestroyメソッドになります。

Destroy (Object obj, float t= 0.0F);

Destroyメソッドには引数が2つあります。1つ目はお察しの通り削除対象のオブジェクトです。それでは2つ目は何でしょう?2つ目は、トリガーとなるイベントが発生してから削除されるまでの待機時間(レイテンシ・遅延)です。例えば、主人公が敵キャラクターを攻撃した後直後、敵キャラクターが消えるようなRPGの設定をイメージしてください。主人公の攻撃が当たった次の瞬間すぐに敵キャラクターが消えてしまっては何だか味気ないですよね?気持ちとしては攻撃を受けた後に軽いリアクションを取らせてから消えてほしいですよね?(笑)そこでこちらの第2引数が活躍します。

以下のスクリプトにおいては3行目に記述されています。というか、ただ単純にUpdateメソッドの中にDestroy()を入れてるだけですが。。。(笑)
このスクリプトをゲームオブジェクトに貼り付けて(アタッチして)ゲームを開始すると一瞬で対象のオブジェクトが削除されます。

void Update()
    {
        Destroy(gameObject);
    }

ゲーム開始前

ゲーム開始後

「Update」メソッドについてもっと詳しく知りたい方はこちらの記事を参照

【Unity連載】UnityとC#におけるメソッド一覧

因みに、第二引数有りだと下の様になります。下のスクリプトでは、ゲーム開始後2秒後にオブジェクトを削除しています。

void Update()
    {
        Destroy(gameObject,2);
    }

更におまけとなりますが、下の様にスクリプトを書くと、ゲームを開始してもゲームオブジェクトは削除されず、エンターキーを押すと対象のオブジェクトが削除されます。つまり、任意のプレイヤーのタイミングでオブジェクトを削除することができます。

void Update()
    {
        //エンターキーが入力された場合「true」
        if (Input.GetKey(KeyCode.Return)){
            Destroy(gameObject);
        }
    }

 

エンターキーの入力についてもっと詳しく知りたい方はこちらの記事を参照

【Unity連載】キーの入力を判定しよう!(GetKey)


注意点

Destroyによるオブジェクトの削除は、単純にGameViewの中から削除するのではなく、Hierarchyの中からも完全に削除してしまいます(もちろんゲームをリロードすると元に戻ります)。つまり、削除対象のオブジェクトを他のスクリプトによってGameObject.Find()していると、削除後に見失うということです。その点を注意しながら使ってみてください。

Destroy前Hierarchy

Destroy後Hierarchy

「GameObject.Find()」メソッドについてもっと詳しく知りたい方はこちらの記事を参照

【Unity連載】GameObject.Findを具体例付きで解説

 
 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次