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

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

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

ゲーム終了の実行

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

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

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

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

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

本記事は次の人におすすめ
  • ビルドしたUnityプロジェクトを終了する方法を知りたい
  • ゲーム終了システムを導入したい
スポンサーリンク

ゲーム終了する方法

ゲーム終了

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

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

しかしながら、ゲームの終了方法は、ユーザーによって異なります。
例えば、タイトル画面にあるボタンで終了する者。
スマホの場合、アプリのタブを廃棄して終了。
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();
    }
}

思い通りのゲームが作れない

Unityでゲーム開発しているけど完成しない。
技術的な壁や知識不足が原因で、思い描いたゲームを実現するのは難しいです。

しかし、Udemyは動画で実践的なゲーム開発を解説していて、
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで学習できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Unityの機能を網羅したいや作りたいゲームがある人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を3つ紹介します。

ビックセール開催中(10月11日まで)
対象のコースが1500円から(最大95%OFF)

多彩な講座から自分に合った講座を探そう!

最大94%OFF

終了まで

時間

Unityのはじめの一歩としておすすめ。開発例に物理挙動やアニメーションを使用しているので、今後の開発が円滑になる。

トランプを題材にした講座。カードゲームやボードゲーム開発に応用可能

UnityエンジンのインストールやC#の文法に加えて、App StoreとGoogle Playにゲームをリリース方法を解説。

容量不足を解消

Unityのプロジェクトは1.5GB~3.5GBと大きく、クリエイターはHDD・SSD増設が必要です。

価格耐久性静音性読み書きサイズ
HDD
SSD

注目点は、HDDは安価だけど壊れやすい。SSDは丈夫だけど高価。
したがって、データの持ち運びをしない場合はHDD、持ち運びする場合はSSDがおすすめです。

  • 据え置きHDD
  • 外付けSDD
  • 内蔵SSD

ぜひ、あなたのクリエイティブな作業環境に兼ね備えたストレージをお役立てください。

解説

ボタンがクリックされたときに呼び出したいので、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を使います。
プロジェクトを閉じやすくすることは、ユーザーがゲームに対して好印象を持つ大事な要素になります。

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

この記事を書いた人

プロフィール

アリッシア

                 

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

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする