UnityのOnEnable、OnDisable、OnDestroy関数について

Unityでは特定のタイミングで呼ばれるイベント関数がいくつもあります。

スクリプトを作成した時にデフォルトで作成されているStart関数やUpdate関数もそのイベントを受け取って実行される関数ですね。

スクリプトにそのイベントの関数を記述していなければ実行はされません。

イベント関数の受け取りはMonoBehaviourクラスを継承して作られたクラスで使用が出来ます。

C#であればデフォルトでMonoBehaviourクラスを継承し、JavaScriptでは何も記述せずともMonoBehaviourクラスを継承して作られます。

今回はOnEnable、OnDisable、OnDestroy関数を使ってみたいと思います。

スポンサーリンク

OnEnable関数

OnEnable関数はスクリプトが設定されているゲームオブジェクトがアクティブになった時に呼ばれる関数です。

ゲームオブジェクトを選択しインスペクタで名前の左側のチェックボックスにチェックが入った時ですね。

あらかじめヒエラルキー上にゲームオブジェクトを置いておきスクリプトでOnEnable関数を記述しておいたとすると、Unityを実行すればOnEnableに記述したスクリプトが実行されます。

ゲームオブジェクトのインスペクタで名前の横のチェックを外してUnityを実行した場合はこのOnEnableは実行されません。

Start関数も似たようなタイミングで呼ばれますが、OnEnable関数の方がタイミングとして早く呼ばれます。

またStart関数は最初にゲームオブジェクトがアクティブになったタイミングで1回しか呼ばれませんが、OnEnable関数はアクティブになると毎回呼ばれます。

OnDisable関数

OnDisable関数はOnEnable関数とは逆でゲームオブジェクトが非アクティブになったときに実行されます。

ゲームオブジェクトのインスペクタの名前の左のチェックを外した時ですね。

ゲームオブジェクトが削除される前にも呼ばれます。

OnDestroy関数

OnDestroy関数はその名の通りそのゲームオブジェクトが削除された時に実行される関数です。

例えば敵を攻撃して倒した時に敵のゲームオブジェクトを消すと思いますがそれと同時にアイテムを落としたい時などにこの関数を使用します。

敵が消えた時に実行される関数なのでその時にアイテムを生成するとちょうどいいかもしれません。

実際に関数を使ってみる

実行タイミングを文章だけで見ても解り辛いのでサンプルスクリプトを作り試してみましょう。

ヒエラルキー上で右クリック→Create Emptyを選択し、インスペクタの名前の左のチェックボックスを外しておきます。

空のイベント用ゲームオブジェクトの作成

↑のようにGameObjectという空のゲームオブジェクトが出来ます。

ゲームオブジェクトを非アクティブにする

インスペクタで名前の横のチェックボックスを外し、新しいスクリプトEventTestスクリプトを作成し取りつけます。

EventTestスクリプトは後で作成します。

今回使用する関数や他のイベントの発生タイミングに関しては

Unity のマニュアルは、Unityの使い方を学ぶ手助けとなります。Unityを使って 2D や 3D ゲームを作成したり、ゲーム以外のアプリを作成したりして多くの経験を積みましょう。

に詳しく記載されています。

イベント発生確認サンプルのEventTestスクリプトを作成する

それではイベントの発生タイミングを確認する為のスクリプトEventTestを作成します。

何の変哲もないスクリプトですね、その関数が呼ばれたら自身の関数名をログに出力しているだけです。

このスクリプトを先ほど作成した空のGameObjectゲームオブジェクトに設定してください。

イベント発生確認サンプル

サンプルの実行手順としては

GameObjectゲームオブジェクトは最初非アクティブにした状態でUnityを実行し、インスペクタの名前の左のチェックボックスにチェックを入れます。

するとOnEnableとStartが呼ばれ、ログを一旦Clearにした後にインスペクタの名前の横のチェックボックスのチェックを外します。

ここでOnDisableが呼ばれています。

ログをClearして、GameObjectゲームオブジェクトを選択した状態で右クリック→Deleteを選択してゲームオブジェクトを削除します。

ここでOnDestroyが呼ばれています。

それぞれのイベントの実行タイミングが確認出来ました。

今回のサンプルでは手動でゲームオブジェクトのオン・オフをしたり削除したりしていますが、実際にはスクリプトからゲームオブジェクトのオン・オフや削除を行います。

スクリプトからゲームオブジェクトをオン・オフしたりゲームオブジェクトを削除するには

↑のような関数を使うとスクリプトからゲームオブジェクトを操作する事が出来ます。

あくまで操作する時に使用する関数を羅列しただけなので実用的でないのはご了承ください・・・・(^_^;)

終わりに

今回のようなイベントの実行タイミングを知っておくとゲームオブジェクトが操作されたタイミングで何らかの処理をする事が出来ます。

AwakeやStart、Update等だけでなくこういったイベント関数も覚えてゲームに活用したいですね(^_^)v

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます