【unity入門】ゲームオブジェクトを削除しよう!Destroy関数の様々な使い方

unityでゲームを作っているとオブジェクトを削除したくなる時ってありますよね。
そんな時に使うのがDestroy関数です。
この記事ではDestroy関数の様々な使い方について扱っていきます。
扱う項目については目次を参照してください。
この記事の目次
Destroy関数とは
Destroy関数はオブジェクトを削除することができる関数のことです。
Destroy (消したいオブジェクト);
といったように使います。
第二引数にfloat型の変数を入れることで消えるまでの時間を指定することができます。
その場合は、
Destroy (消したいオブジェクト,float型の変数);
という使い方になります。
Destroy関数で自分自身を消す
Destroy関数で自分自身(スクリプトを追加したオブジェクト)を消してみましょう。

上記の画像の上側のオブジェクトにスクリプトを追加し、

Destroy関数で上側のオブジェクト自身を削除しましょう。
今回使うコードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//ゲーム起動時に呼び出される
void Start()
{
//スクリプトがついているオブジェクトを削除
Destroy(gameObject);
}
}
実行結果は、

Destroy関数で子オブジェクトを消す
Destroy関数は子オブジェクトを消すこともできます。
1.特定の子オブジェクトを削除する
2.全ての子オブジェクトを削除する
の2パターンについて見ていきましょう。
今回はSphereオブジェクトの子階層にCapsule1とCapsule2がある状態を例として用います。

特定の子オブジェクトを削除する
特定の子オブジェクトの消し方は、
Destroy(gameObject.transform.FindChild("子オブジェクトの名前").gameObject);
今回はSphereオブジェクトの子階層にあるCapsule1を消してみましょう。

コードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//ゲーム起動時に呼び出される
void Start()
{
//子オブジェクトを削除
Destroy(gameObject.transform.FindChild("Capsule1").gameObject);
}
}
実行結果は、

全ての子オブジェクトを削除する
全ての子オブジェクトの消し方は、foreachで全ての子オブジェクトを取得し一つずつ消していくだけです。
今回はSphereオブジェクトの子階層にあるオブジェクトを全て消してみましょう。

コードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//ゲーム起動時に呼び出される
void Start()
{
//子オブジェクトを一つずつ取得
foreach (Transform child in gameObject.transform)
{
//削除する
Destroy(child.gameObject);
}
}
}
実行結果は、

Destroy関数で一定時間後に消す
Destroy関数の第二引数にfloat型の変数を入れることで一定時間後に消すことができます。
Destroy (消したいオブジェクト,float型の変数);
というように使います。
今回はスタートと同時にSphereオブジェクトの子階層にあるCapsule1を消し、2.5秒後にCapsule2を消してみましょう。
コードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
//ゲーム起動時に呼び出される
void Start()
{
//スタートと同時に消す
Destroy(gameObject.transform.FindChild("Capsule1").gameObject);
//2.5秒後に消す
Destroy(gameObject.transform.FindChild("Capsule2").gameObject , 2.5f);
}
}
実行結果は、

上記のgif画像では2.5秒後ではないですが、一定時間後に消えていますね。
まとめ
この記事では、
Destroy関数で
・自分自身を消す
・子オブジェクトを消す
・一定時間後に消す
といったことを扱いました。
この記事を読んで少しでもDestroy関数についての理解が深まったのなら幸いです。