WisdomSoft - for your serial experiences.

オブジェクトの削除

シーンに読み込まれているオブジェクトを削除するには、スクリプトから明示的に Destroy() メソッドを呼び出して解放する必要があります。

スクリプトからオブジェクトを消す

Unity エンジンによって管理されているオブジェクトはガベージコレクションの対象とはならず、スクリプトの参照に関わらずシーンに存在し続けます。オブジェクトを明示的に削除するには、スクリプトから Destroy() メソッドを用いる必要があります。特に、実行時に動的に生成した弾やアイテムなどは、不要になった時点で削除しなければ、いつまでも消えずにシーンに残り続けてしまいます。

Object クラス Destroy() メソッド
public static void Destroy(Object obj)
public static void Destroy(Object obj, float t)

obj パラメータには削除するオブジェクトを、t パラメータには削除されるまでの時間を秒単位で指定します。t パラメータを指定しない場合は 0 と同意で、すぐにオブジェクトが削除されます。

弾やアイテムなど一定時間が経過すると画面から消えるオブジェクトは、多くのアクションゲームで共通した処理でしょう。指定した時間経過で削除する Destroy() メソッドを使えば、こうした演出が容易にスクリプトから制御できます。

コード1
using UnityEngine;

public class Test : MonoBehaviour
{
	void Start()
	{
		Object.Destroy(gameObject);
	}
}
実行結果
コード1 実行結果 コード1 実行結果

コード1はスクリプトを実行しているゲームオブジェクトを削除する単純な例です。ゲームオブジェクトを削除することが目的の場合は gameObject プロパティから得られる GameObject オブジェクトを Destroy() メソッドに渡します。しばしば、ゲームオブジェクトを削除する目的のために this を渡してしまう間違いが見られるので注意してください。

Object.Destroy(this);

これを MonoBehaviour クラスを継承しているスクリプトの中で実行した場合、Unity から削除されるのはゲームオブジェクトではなく、オブジェクトに設定されているスクリプト自身となります。スクリプトをオブジェクトから解除する目的であれば Destroy() メソッドに this を渡します。