テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】アプリケーションの終了を確認するダイアログを表示する

ゲームのアプリケーション時に「終了しますか?」的な事を聞く機能についてです。具体的にはエロゲのそれ。

f:id:tsubaki_t1:20160526013717g:plain

終了を検知する

まずはアプリケーションの終了を検知します。

これは難しい事も無く、OnApplicationQuitをMonobehaviourのコールバックに設定するだけです。

なお、モバイル(特にAndroid)では多分これは動きません。そもそもモバイルではアプリを終了させるという事自体が推奨されない事だと思うので、まぁ。

終了をキャンセルする

次に終了処理をキャンセルします。

キャンセルにはApplication.CancelQuitを使用します。これをOnApplicationQuitが呼ばれたタイミングで実行すると、終了処理を一旦中断します。

あとは終了をキャンセルした後に「終了の確認ダイアログ」を表示しておき、終了しないのであればダイアログを閉じるようにします。

 

なお、OnApplicationQuitApplication.CancelQuitだけを記述すると、アプリが終了しなくなります。

f:id:tsubaki_t1:20160526014658g:plain

なお、モバイルでは動作しません。モバイルではアプリ終了はイレギュラーです。

改めて終了する

最後にアプリを終了させます。

アプリケーションはApplication.Quitスクリプト側から終了させることが出来ます。ただし、終了時にもApplication.CancelQuitの効果が有効な点に注意です。つまり、Application.CancelQuitを無効化しないとApplication.Quitでも殺せません。

 

今回の自分のケースでは、Application.CancelQuitは「ダイアログが表示されていないタイミングのみ」表示するようにしました。

 

なお、iOSではユーザーに確認せずApplication.Quitを使うとリジェクトされるかもしれません。

Technical Q&A QA1561: How do I programmatically quit my iOS application?

ソースコード

gist.github.com

ダイアログ

f:id:tsubaki_t1:20160526015657j:plain

応用

この終了を一時中断する処理を応用すれば、少し処理を挟むことが出来そうです。
例えばゲームの進行度合いをサーバーにアップロードしたり、終了時に画面をフェードアウトしたり、終了前にCMを表示したり等々。

f:id:tsubaki_t1:20160526021610g:plain