オブジェクトの削除
スクリプトからオブジェクトを消す
Unity エンジンによって管理されているオブジェクトはガベージコレクションの対象とはならず、スクリプトの参照に関わらずシーンに存在し続けます。オブジェクトを明示的に削除するには、スクリプトから Destroy() メソッドを用いる必要があります。特に、実行時に動的に生成した弾やアイテムなどは、不要になった時点で削除しなければ、いつまでも消えずにシーンに残り続けてしまいます。
public static void Destroy(Object obj)
public static void Destroy(Object obj, float t)
obj パラメータには削除するオブジェクトを、t パラメータには削除されるまでの時間を秒単位で指定します。t パラメータを指定しない場合は 0 と同意で、すぐにオブジェクトが削除されます。
弾やアイテムなど一定時間が経過すると画面から消えるオブジェクトは、多くのアクションゲームで共通した処理でしょう。指定した時間経過で削除する Destroy() メソッドを使えば、こうした演出が容易にスクリプトから制御できます。
using UnityEngine; public class Test : MonoBehaviour { void Start() { Object.Destroy(gameObject); } }
コード1はスクリプトを実行しているゲームオブジェクトを削除する単純な例です。ゲームオブジェクトを削除することが目的の場合は gameObject プロパティから得られる GameObject オブジェクトを Destroy() メソッドに渡します。しばしば、ゲームオブジェクトを削除する目的のために this を渡してしまう間違いが見られるので注意してください。
Object.Destroy(this);
これを MonoBehaviour クラスを継承しているスクリプトの中で実行した場合、Unity から削除されるのはゲームオブジェクトではなく、オブジェクトに設定されているスクリプト自身となります。スクリプトをオブジェクトから解除する目的であれば Destroy() メソッドに this を渡します。