【Unity】ビルドしたゲームを終了の処理をするスクリプト

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと次のような実行ができるようになります

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

ゲーム終了の実行

Unityで開発したゲームを配布・販売するには、プロジェクトをビルド化します。

その後ゲームを立ち上げると、フルスクリーン化して閉じるボタンがないため、
ゲームを終了させることができなくて困った経験があるでしょう。

読者の方がユーザーとしてゲームをするときは、画面内にゲーム終了ボタンがあるので、
ゲームを閉じることができます。

しかし、そのシステム(スクリプト)は、開発者が実装しなければいけません。

本記事では、プロジェクトの終了できない人に向けて、終了時の処理するイベントを紹介します。

本記事は次の人におすすめ
  • ビルドしたUnityプロジェクトを終了する方法を知りたい
  • ゲーム終了システムを導入したい
ブログを始めるならConoHaがおすすめ!

ConoHaWing開設方法|アリッシア
技術ブログを書くべき理由|アリッシア

スポンサーリンク

ゲーム終了する方法

ゲーム終了

ゲームを終了する方法は開発者としてではなく、
プレイするユーザー側の視点で設置しなければいけません。

ゲームの終了方法が分かりにくい。
ややこしい場合は、プレイヤーは不快な気持ちになります。

しかしながら、ゲームの終了方法は、ユーザーによって異なります。
例えば、タイトル画面にあるボタンで終了する者。
スマホの場合、アプリのタブを廃棄して終了。
PCの場合、コマンドキーを使って終了。

色々な終了パターンでセーブを保存できるようにしないと、
データが消滅してしまいユーザーが離れる原因になります。
開発者はあらゆる終了パターンを想定して、セーブシステムを作らなければいけません。

セーブデータの作り方を紹介しています。

ショートカットキー(開発者向け)

Unityでビルドしたゲームを最も簡単に終了する方法は、ショートカットキーを使用することです。

「ALT」+「F4」

2つのキーを同時押しすることで、閉じることができます。

「ALT」+「F4」でゲーム終了

例えばWindowsで保存する場合は、「Ctrl」+「S」を同時押しします。
CtrlキーはCmdキーに相当するので、
Macで保存する場合は「Cmd」+「S」の入力で同じ処理がされます。

WindowsでのAltキーは、MacのOptionキーに相当します。
しかし、「Option」+「F4」でゲームを終了できません。

Macには、Windowsのように閉じるコマンドキーは設定されていません。

Unityでmacが優勢なこと

その他にも、次のウィンドウを選択「Ctrl + Tab」や前のウィンドウを選択「Ctrl + Shift + Tab」などのコマンドがMacにはありません。

しかし、コマンドの少なさからUnityはwindowsの方が相性がよいというわけではありません。
iPhone向けのゲーム・アプリを作るには、Macがないと開発・公開できません。

クリエイターはmac離れしているのか、データから考察しています。

ショートカットキーによる終了は、Unityを開発している人しか知らないものです。
さらに、普段からコマンド入力をしていなければ、開発者でも知らないことでしょう。

したがって、ショートカットでゲームを終了させることをメインにするのはやめましょう。

UIボタンで終了

UIボタンによるゲームの閉じ方

UIボタンを使った終了であれば開発者だけではなく、
ゲームをするユーザーにも認知されるので、こちらを使うことをおすすめします。

アプリケーション(ビルドしたゲーム)を終了させる方法は簡単で、
Application.Quitを使用するだけです。

spaceキーでゲームを終了
using UnityEngine;

public class QuitGame : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKey("space"))
        {
            Application.Quit();
        }
    }
}

この例ではUpdateメソッドでspaceキーが押されたときに、
Application.Quit()メソッドを呼び出しています。

これはエディタ上では動作せず、ビルドしたアプリケーションでのみ機能します。

確認できるように、スペースキーを押下すると、ビルドしたゲームは終了します。

spaceキーでゲーム終了

このApplication.Quitを使ってUIボタンを押すと、ゲームを終了するスクリプトを書きます。

ソースコード

using UnityEngine;

public class QuitBtn : MonoBehaviour
{
    public void Click() {
        Application.Quit();
    }
}

ブログを運営するメリット

プログラマーがブログを運営するメリットは沢山あります。
エンジニアはブログを運営するべき理由|アリッシア

  • アウトプットによるスキル向上
  • メモ帳代わり
  • ポートフォリオ(案件獲得)

ブログを始めるためには、「テーマ」・「ドメイン」・「サーバー」の3つが必要です。
3つはブログ運営の基盤となる要素ですが、これら全て自分で用意しなければいけません。

面倒で難しくブログ開設を断念してしまう人が多いです。

ConoHa Wingの「WordPressかんたんセットアップ」は
最短10分で契約可能!

WordPressかんたんセットアップの手順を紹介しています。

ConoHa WINGから契約をすれば、独自ドメインサーバーの用意WordPressとの連携も簡単にできます。

さらに、2つの独自ドメインが永久無料の特典もあり、
月660円からの破格価格にもかかわらず、表示速度は国内最速です。

解説

ボタンがクリックされたときに呼び出したいので、publicでClickメソッドを作成してください。

public、privateなどのアクセス修飾子の使い方を紹介しています。

Click メソッド内で呼び出されると、
Applicationクラスの Quitメソッドを呼び出し、アプリケーションを終了します。

実演

HierarchyウィンドウからUIボタンを追加してください。

UIボタンを選択し、Inspectorウィンドウの「On click」でClickメソッドをアタッチしてください。

On clickと関数の連携

Applicationクラスの Quitメソッドは、ビルドしたプロジェクトのみで動くので、ビルドしてください。

ビルドしたプロジェクトを立ち上げて、表示されたボタンを押してください。

終了されると、スクリプトは正常に動作しています。

UIボタンによる実演

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

確認ウィンドウ

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をアタッチしてください。

onclickとウィンドウの連携

実行をすると、冒頭で紹介したように終了ボタンを押すと、パネルが出現。
YESを押すと、ゲームが終了。NOを押すと、パネルが非表示になります。

まとめ

Unityでゲームを終了するには、Application.Quitを使います。
プロジェクトを閉じやすくすることは、ユーザーがゲームに対して好印象を持つ大事な要素になります。

ゲームの終了方法はさまざまあり、閉じ方はユーザーごとに異なります。
あらゆる手段を想定して、セーブデータが損失しないように開発をしてください。

ブログを始めるならConoHaがおすすめ!

ConoHaWing開設方法|アリッシア
技術ブログを書くべき理由|アリッシア

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする
タイトルとURLをコピーしました