LoginSignup
1
0

More than 3 years have passed since last update.

Unityでの2Dアクションゲームの作成(GameOverとリスタート)

Last updated at Posted at 2021-05-31

前回で敵キャラクターの当たり判定を作ってカエル君が消滅するようにしたので、敵キャラと衝突 or 落下時にGameOverとなりリスタートするような処理を作ります。

まずは穴に落ちたらゲームオーバーとなるようにしていきます。

HierarchyビューからCreate Emptyを選択します、場外の判定をつけるので名前はOutsideとします。
OutsideへAdd ComponentでBox Collider 2Dを追加します。落下時の判定を付けるためにポジションを変更してステージの下部に設置、Box Collider 2DのX方面のSizeをこんな感じで大きくします。
rapture_20210517223625.jpg

ぶつかった事を検知するためにIs Triggerにチェックを入れ、何にぶつかったかを判定するためにTagを選択してAdd TagからTagを付けます。ぶつかったらゲームが終了するためにTagの名前はGameOverとでもしておきます。

Add tagにGameOverを作成して
rapture_20210518225205.jpg

Tagを付けてTriggerにチェックを入れるとこんな感じ
rapture_20210518225417.jpg

次にスクリプトのPlayerManagement.csを開いてGameOverに触れた時の処理を書いていきます。
既に記述してある"OnTriggerEnter2D"内へ以下のようにGameOver tagに触れた時にデバッグコンソールへ文字を出す処理を追加します。

PlayerManagement.cs
private void OnTriggerEnter2D(Collider2D collision)
{
    (途中省略)

   if(collision.gameObject.tag == "GameOver")
   {
      Debug.Log("ゲームオーバー");
   }
}

動かしてみるとこんな感じ。
rapture_20210530000742.jpg

落下してGameOvet tagへ触れた時にゲームオーバーと表示するようになりました。

次にコンソールだけでなく画面上にもゲームオーバーを表示するようにしていきます。Hierarchyビューの+を選択してUI>Textを選択。

テキスト.jpg

テキストが出来るので選択してポジションを全て0へ変更。
rapture_20210530230620.jpg

その状態で再生を行うと画面の中央にテキストが表示されるようになります。
rapture_20210530231239.jpg

TextのInspectorから表示するText、縦横の大きさ、フォントサイズ、色などを変更していきます。
rapture_20210530232410.jpg
いじるとこんな感じ。
rapture_20210530232421.jpg
これで大きく表示できるようになりました。

テキストの名前をGameOverTextに変更した後にチェックを外しいったん非表示にします。
rapture_20210531213731.jpg

GameOver tagに触れた時にテキストが表示されるようにスクリプトを書いていきます。

HierarchyビューからCreate Emptyを選択してGameObjectを作ります、名前はGameManagerにしておきます。スクリプトにもGameManagerを作成してObjectの方へドラッグアンドドロップ。

rapture_20210531215037.jpg

GameManagerへGameOverテキストを呼び出すスクリプトを書いていきます。

GameManager.cs
private void OnTriggerEnter2D(Collider2D collision)
{
    public GameObject gameoverText;

    public void GameOver()
    {
        // GameOverテキストを呼び出す
        gameoverText.SetActive(true);
    }
}

PlayerManagementの方へ記述を追加してGameOver tagやEnemy tagに触れた場合にGameOver()を呼び出すようにします。

PlayerManagement.cs
private void OnTriggerEnter2D(Collider2D collision)
{
    public GameManager gamemanager;

   (途中省略)

    // トリガーが発生した時の処理
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 接触したオブジェクトのtag名がEnemyの場合は
        if(collision.gameObject.tag == "Enemy")
        {
            // Playerオブジェクトを消去する
            Destroy(this.gameObject);
            // ゲームオーバーを呼び出す
            gamemanager.GameOver();
        }
        if(collision.gameObject.tag == "GameOver")
        {
            Debug.Log("ゲームオーバー");
            // ゲームオーバーを呼び出す
            gamemanager.GameOver();
        }
    }
}

スクリプトを書いたらPlayerとGameManagerへ設定していきます。
rapture_20210531221623.jpg
rapture_20210531221644.jpg

設定出来たら再生を行います。画面外に落ちるとGAME OVERが表示されるようになっています。
Gameover.gif

GameOverになったらリスタートする処理も追加していきます。GameManager.csへ
using UnityEngine.SceneManagement
を追加してしてシーンを取得してロードするGameRestart()を作成します。

GameManager.cs
using UnityEngine.SceneManagement;

private void OnTriggerEnter2D(Collider2D collision)
{
    public GameObject gameoverText;

    public void GameOver()
    {
        // GameOverテキストを呼び出す
        gameoverText.SetActive(true);
        // GameRestartを呼び出して2秒間待つ
        Invoke("GameRestart", 2);
    }

    public void GameRestart()
    {
        // 現在のシーンを取得してロードする
        Scene activeScene = SceneManager.GetActiveScene();
        SceneManager.LoadScene(activeScene.name);
    }
}

以下のように落下したり敵キャラとぶつかるとGAME OVER表示が出現し2秒後にリスタート出来るようになりました。
Gameover2.gif

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0