【初心者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); }
因みに、第二引数有りだと下の様になります。下のスクリプトでは、ゲーム開始後2秒後にオブジェクトを削除しています。
void Update() { Destroy(gameObject,2); }
更におまけとなりますが、下の様にスクリプトを書くと、ゲームを開始してもゲームオブジェクトは削除されず、エンターキーを押すと対象のオブジェクトが削除されます。つまり、任意のプレイヤーのタイミングでオブジェクトを削除することができます。
void Update() { //エンターキーが入力された場合「true」 if (Input.GetKey(KeyCode.Return)){ Destroy(gameObject); } }
注意点
Destroyによるオブジェクトの削除は、単純にGameViewの中から削除するのではなく、Hierarchyの中からも完全に削除してしまいます(もちろんゲームをリロードすると元に戻ります)。つまり、削除対象のオブジェクトを他のスクリプトによってGameObject.Find()していると、削除後に見失うということです。その点を注意しながら使ってみてください。