【Unity】GameOver画面を表示する方法パターンまとめ

# はじめに
GameOver画面を作成する方法にも様々な遷移方法があるので忘れないようにまとめました。
GameOverになった時の遷移方法としてまとめていますが、他の場面でも使いまわせます。

# 実装動作
障害物に当たったらゲームオーバー画面が表示される。
![スクリーンショット 2023-01-09 7.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958170/9ee1204c-74ce-60b9-feda-c3b8a0ec692a.png)
![スクリーンショット 2023-01-09 7.24.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958170/5a8ee147-b966-e685-e202-9fb3c72e8449.png)

## 衝突判定をタグで管理して画面遷移する方法3選
はじめにやっておくこと
![スクリーンショット 2023-01-09 7.26.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958170/7fb81f1a-ea33-99d8-aaf6-b7a76c4cbe6c.png)
1.赤枠を作成する
　　Hierarchy > UI> Canvas(GameOverCanvas)
　　UI > Panel(GameOverPanel)
　　UI > Legacy > Text(GameOverText)
2.GameOver.csをGameOverCanvasへアタッチ
3.Obstacle.csをObstacleへアタッチ
4.PlayerにBoxCllider(IsTriggerチェック),Rigidbody追加
5.ObstacleにBoxCllider追加
6.Playerタグにする
![スクリーンショット 2023-01-09 7.41.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958170/2b2cc5a4-aaf8-7c6f-0ce8-1f242d615f60.png)
### パターン1 enabledを使用してGameOver画面を表示する方法
1.スクリプト記述
```
(GameOver.cs)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameOver : MonoBehaviour
{

    //キャンバス用
    private static Canvas gameOverCanvas;

    private void Awake()
    {
        //Canvasコンポーネント取得
        gameOverCanvas = GetComponent<Canvas>();
    }

//パネルを開く用の関数 static呼び出し可能
    public static void GameOverShowPanel()
    {
        //ゲーム内の時間を止める
        Time.timeScale = 0f;

        //ボタンを有効にする
        //GameOverCanvasのCanvasのチェックをデフォルトで外すと関数が呼ばれた時にtrueになる(衝突した時に表示される)
        gameOverCanvas.enabled = true;
    }

    //ゲームを再スタートする関数
    public void ReStartGame()
    {
        //止めたゲーム内の時間を戻す
        Time.timeScale = 1f;

        //シーン再読み込み
        SceneManager.LoadScene(0);
    }
}
```
```
(Obstacle.cs)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Obstacle : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
            GameOver.GameOverShowPanel();
        }
    }
}

```
2.チェックをはずしておく
![スクリーンショット 2023-01-09 7.38.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958170/5e962990-b2c1-60f9-bf3a-5e027e47949c.png)


### パターン２　 シーン遷移(シーン名)でGameOver画面を表示させる方法

1.MainSenesをセーブする
2.File > newSenes > Seve(GameOverSenes)
3.スクリプト記述
　パターン1のGameOverShowPanel関数を変更
```
 //パネルを開く用の関数 static呼び出し可能
    public static void GameOverShowPanel()
    {
        //ゲーム内の時間を止める
        Time.timeScale = 0f;

        //ボタンを有効にする
        //GameOverCanvasのCanvasのチェックをデフォルトで外すと関数が呼ばれた時にtrueになる(衝突した時に表示される)
        gameOverCanvas.enabled = true;
```
こちらへ変更
```
    //パネルを開く用の関数 static呼び出し可能
    public static void GameOverShowPanel()
    {
        //ゲーム内の時間を止める
        Time.timeScale = 0f;

        //GameOverSceneを呼び出す
        SceneManager.LoadScene("GameOverScene")
    }
```

### パターン3　 シーン遷移(ファイル番号)でGameOver画面を表示させる方法

1.MainSenesをセーブする
2.File > newSenes > Seve(GameOverSenes)
3.File > BuildSettings > GameOverSenes追加
4.スクリプト記述
パターン1のGameOverShowPanel関数を変更
```
 //パネルを開く用の関数 static呼び出し可能
    public static void GameOverShowPanel()
    {
        //ゲーム内の時間を止める
        Time.timeScale = 0f;

        //ボタンを有効にする
        //GameOverCanvasのCanvasのチェックをデフォルトで外すと関数が呼ばれた時にtrueになる(衝突した時に表示される)
        gameOverCanvas.enabled = true;
```
こちらへ変更
```
       //パネルを開く用の関数 static呼び出し可能
    public static void GameOverShowPanel()
    {
        //ゲーム内の時間を止める
        Time.timeScale = 0f;

        //GameOverSceneを呼び出す
        SceneManager.LoadScene("1")
    }
```