この記事でのバージョン
Unity 5.5.0p1
はじめに
MonoBehaviourには無効になったときに呼ばれるOnDisableと、
破棄される時に呼ばれるOnDestroyという関数があります。
なお、GameObjectを削除すると両方呼ばれます。
イメージとしては以下のような感じ。
using UnityEngine; public class NewBehaviourScript : MonoBehaviour { private void OnDisable () { Debug.Log("OnDisable"); } private void OnDestroy(){ Debug.Log("OnDestroy"); } }
![]() |
ただし、これらの関数はエディタを止めた時にも実行されてしまいます。
![]() |
今回はエディタを止めた時にこれらを実行しない方法のご紹介です!
OnApplicationQuit
まず、エディタを止めた時だけ実行しないという設定はありません。
なので、 エディタを止めようとしているという事を検知し、その時だけ実行しないようにします。
その検知に使えるのがMonoBehaviourのOnApplicationQuitです。
アプリケーションが終了する前にすべてのゲームオブジェクトで呼び出されます
なお、Application.isPlayingはOnDisable、OnDestroy時にはまだtrueなので、今回は使えません。
実際に先ほどのコードにOnApplicationQuitを使って、OnDisableやOnDestroyが
エディタを止めた時には実行しないようにすると以下のような感じになります。
using UnityEngine; public class NewBehaviourScript : MonoBehaviour { private bool _isQuitting = false; private void OnApplicationQuit () { Debug.Log("OnApplicationQuit"); _isQuitting = true && Application.isEditor; } private void OnDisable () { if(_isQuitting){ return; } Debug.Log("OnDisable"); } private void OnDestroy(){ if(_isQuitting){ return; } Debug.Log("OnDestroy"); } }
![]() |