終了ボタンを押して、パネルを表示。Yesに進むとゲームは閉じて、Noに進むとパネルが非表示。

Unityで開発したゲームを配布・販売するには、プロジェクトをビルド化します。
ビルドしたゲームを立ち上げると、フルスクリーン化して閉じるボタンがないため、ゲームを終了させることができなくて困った経験があるでしょう。
読者の方がユーザーとしてゲームをするときは、画面内にゲーム終了ボタンがあるので、ゲームを閉じることができます。
しかし、そのシステム(スクリプト)は、開発者が実装しなければいけません。
本記事では、プロジェクトの終了できない人に向けて、終了時の処理するイベントを紹介します。
- ビルドしたUnityプロジェクトのアプリ終了する方法を知りたい
 - ゲーム終了システムを導入したい
 - スクリプトでゲーム終了処理をしたい
 
Unityでゲーム終了する方法

Unityでゲーム終了する方法は開発者としてではなく、プレイするユーザー側の視点で設置しなければいけません。
ゲームの終了方法が分かりにくい。ややこしい場合は、プレイヤーは不快な気持ちになります。
しかしながら、ゲームの終了方法は、ユーザーによって異なります。
例えば、タイトル画面にあるボタンで終了。スマホの場合、アプリのタブを廃棄して終了。PCの場合、コマンドキーを使って終了。
色々な終了パターンでセーブを保存できるようにしないと、データが消滅してしまいユーザーが離れる原因になります。
開発者はあらゆる終了パターンを想定して、セーブシステムを作らなければいけません。
ショートカットキー(開発者向け)
Unityでビルドしたゲームを最も簡単に終了する方法は、ショートカットキーを使用することです。
「ALT」+「F4」
2つのキーを同時押しすることで、閉じることができます。

例えばWindowsで保存する場合は、「Ctrl」+「S」を同時押しします。
CtrlキーはCmdキーに相当するので、Macで保存する場合は「Cmd」+「S」の入力で同じ処理がされます。
WindowsでのAltキーは、MacのOptionキーに相当します。
しかし、「Option」+「F4」でゲームを終了できません。
Macには、Windowsのように閉じるコマンドキーは設定されていません。
その他にも、次のウィンドウを選択「Ctrl + Tab」や前のウィンドウを選択「Ctrl + Shift + Tab」などのコマンドがMacにはありません。
しかし、コマンドの少なさからUnityはwindowsの方が相性がよいというわけではありません。
iPhone向けのゲーム・アプリを作るには、Macがないと開発・公開できません。
ショートカットキーによる終了は、Unityを開発している人しか知らないものです。
さらに、普段からコマンド入力をしていなければ、開発者でも知らないことでしょう。
したがって、ショートカットでゲームを終了させることをメインにするのはやめましょう。
UIボタンでアプリ終了するスクリプト

UIボタンを使った終了であれば開発者だけではなく、ゲームをするユーザーにも認知されるので、こちらを使うことをおすすめします。
ボタンを使って関数を実行するにはスクリプトを作成する必要があります。
アプリケーション(ビルドしたゲーム)を終了させる方法は簡単で、Application.Quitを使用するだけです。
using UnityEngine;
public class QuitGame : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKey("space"))
        {
            Application.Quit();
        }
    }
}
この例ではUpdateメソッドでspaceキーが押されたときに、Application.Quit()メソッドを呼び出しています。これはエディタ上では動作せず、ビルドしたアプリケーションでのみ機能します。
確認できるように、スペースキーを押下すると、ビルドしたゲームは終了します。

このApplication.Quitを使ってUIボタンを押すと、ゲームを終了するスクリプトを書きます。
ソースコード
using UnityEngine;
public class QuitBtn : MonoBehaviour
{
    public void Click() {
        Application.Quit();
    }
}UdemyでUnityを学習
Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。
- 【Unity C# ゲーム開発超入門】7つのミニゲームを作っておぼえる!UnityとC#講座
Unityで頻出の機能を実際のゲーム作りで学習。
何か作りたい、今後の開発で役立てたい初心者におすすめ 
- 【Unity C# ゲーム開発初心者レベルアップ】7つのトランプゲームを作っておぼえる!UnityとC#講座
トランプやボードゲーム作りに特化している講座。
テーブルゲームを作りたい人におすすめ。 
- 【全行程を網羅!最初に学びたい総合学習】Unityワールド制作講座
Unityワールド制作の全工程を学習できる講座。
RPGを作りたい人におすすめ。 
- Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】
C#の文法やApp StoreとGoogle Playへゲームをリリース方法を解説。
ゲームを出品したい人におすすめ。 
解説
ボタンがクリックされたときに呼び出したいので、publicでClickメソッドを作成してください。
Click メソッド内で呼び出されると、
Applicationクラスの Quitメソッドを呼び出し、アプリケーションを終了します。
実演
HierarchyウィンドウからUIボタンを追加してください。
UIボタンを選択し、Inspectorウィンドウの「On click」でClickメソッドをアタッチしてください。

Applicationクラスの Quitメソッドは、ビルドしたプロジェクトのみで動くので、ビルドしてください。
ビルドしたプロジェクトを立ち上げて、表示されたボタンを押してください。
終了されると、スクリプトは正常に動作しています。

終了確認のウィンドウを表示

UIボタンで終了を実装できましたが、うっかりゲームを終了するボタンを押してしまうことがあります。押し間違いで何度もゲームを開いているとユーザーからすればストレスに感じます。
そこで、終了確認するウィンドウ(パネル)を表示して、「YES」の押下でゲームを閉じる。
「NO」の押下でゲームを続けるようにします。
ソースコード
using UnityEngine;
using UnityEngine.UI;
public class QuitGame : MonoBehaviour
{
    public GameObject quitPanel;
    public GameObject quitButton;
    public Button yesButton;
    public Button noButton;
    private void Start()
    {
        quitPanel.SetActive(false);
        // ボタンにリスナーを追加
        yesButton.onClick.AddListener(QuitGameYes);
        noButton.onClick.AddListener(QuitGameNo);
    }
    // クリックされたときに呼び出されるメソッド
    public void OnQuitButtonClick() 
    {
        quitPanel.SetActive(true);
        quitButton.SetActive(false);
    }
    // Yesボタンがクリックされたときに呼び出されるメソッド
    public void QuitGameYes()
    {
        Application.Quit();
    }
    // Noボタンがクリックされたときに呼び出されるメソッド
    public void QuitGameNo()
    {
        quitPanel.SetActive(false);
        quitButton.SetActive(true);
    }
}解説
初めに名前空間を定義します。
UIボタン・パネルを使用するので、using UnityEngine.UI;を追加してください。
using UnityEngine;
using UnityEngine.UI;Inspectorで編集可能にするために、publicな変数として、「quitPanel」・「quitButton」 ・「yesButton」・「noButton」を指定します。
「quitPanel」・「quitButton」は表示・非表示でSetActiveを使いたいので、GameObject。
「yesButton」・「noButton」はAddListenerで、ボタンにリスナーを追加してメソッドを実行したいので、Button。
public GameObject quitPanel;
public GameObject quitButton;
public Button yesButton;
public Button noButton;Start()メソッドでは、終了確認ダイアログを非表示にし、YesボタンとNoボタンにそれぞれ終了処理と非表示処理を関連付けるリスナーを追加します。
private void Start()
{
 quitPanel.SetActive(false);
 yesButton.onClick.AddListener(QuitGameYes);
 noButton.onClick.AddListener(QuitGameNo);
}OnQuitButtonClick()メソッドは、終了ボタンがクリックされたときに呼び出されるメソッド。
終了確認ダイアログを表示し、終了ボタンを非表示にします。
    public void OnQuitButtonClick() 
    {
        quitPanel.SetActive(true);
        quitButton.SetActive(false);
    }
QuitGameYes()メソッドは、Yesボタンがクリックされたときに呼び出されるメソッド。
Application.Quit()を呼び出してゲームを終了します。
    public void QuitGameYes()
    {
        Application.Quit();  // アプリケーションを終了する
    }QuitGameNo()メソッドは、Noボタンがクリックされたときに呼び出されるメソッドで、OnQuitButtonClick()メソッドとは対の関係にあります。
終了確認ダイアログを非表示にし、終了ボタンを再表示します。
    public void QuitGameNo()
    {
        quitPanel.SetActive(false);  // 終了確認ダイアログを非表示にする
        quitButton.SetActive(true);   // 終了ボタンを再表示する
    }実演
Hierarchyウィンドウにパネルを設置してください。
Inspectorウィンドウにスクリプトをアタッチしてください。
パネルの配置後、終了ボタン、パネル。
パネルに従属するYESとNOボタン2つをそれぞれアタッチしてください。

次に、終了してパネルを呼び出すように、終了ボタンのOnClickをアタッチしてください。

実行をすると、冒頭で紹介したように終了ボタンを押すと、パネルが出現。
YESを押すと、ゲームが終了。NOを押すと、パネルが非表示になります。
まとめ
Unityでゲームを終了するには、Application.Quitを使います。
プロジェクトを閉じやすくすることは、ユーザーがゲームに対して好印象を持つ大事な要素になります。
ゲームの終了方法はさまざまあり、閉じ方はユーザーごとに異なります。
あらゆる手段を想定して、セーブデータが損失しないように開発をしてください。

  
  
  
  




