ゲームのアプリケーション時に「終了しますか?」的な事を聞く機能についてです。具体的にはエロゲのそれ。
終了を検知する
まずはアプリケーションの終了を検知します。
これは難しい事も無く、OnApplicationQuitをMonobehaviourのコールバックに設定するだけです。
なお、モバイル(特にAndroid)では多分これは動きません。そもそもモバイルではアプリを終了させるという事自体が推奨されない事だと思うので、まぁ。
終了をキャンセルする
次に終了処理をキャンセルします。
キャンセルにはApplication.CancelQuitを使用します。これをOnApplicationQuitが呼ばれたタイミングで実行すると、終了処理を一旦中断します。
あとは終了をキャンセルした後に「終了の確認ダイアログ」を表示しておき、終了しないのであればダイアログを閉じるようにします。
なお、OnApplicationQuitにApplication.CancelQuitだけを記述すると、アプリが終了しなくなります。
なお、モバイルでは動作しません。モバイルではアプリ終了はイレギュラーです。
改めて終了する
最後にアプリを終了させます。
アプリケーションは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?
ソースコード
ダイアログ
応用
この終了を一時中断する処理を応用すれば、少し処理を挟むことが出来そうです。
例えばゲームの進行度合いをサーバーにアップロードしたり、終了時に画面をフェードアウトしたり、終了前にCMを表示したり等々。