前回は、一時停止画面と一時停止ボタンを作成しました。
今回は、Pauseボタンを押すとゲームが止まって一時停止画面が開いて、
Restartボタンを押すとゲームが再開するという処理を追加します。
一時停止の処理を追加
今回は、一時停止のスクリプトを追加します。
まずは、処理を追加したGameManagementスクリプトを確認してください。
あとで追加した処理の解説をします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManagement : MonoBehaviour
{
    // スコア関連
    public Text scoreText;
    private int score;
    public int currentScore;
    public int clearScore = 1500;
    // タイマー関連
    public Text timerText;
    public float gameTime = 60f;
    int seconds;
    // 今回の追加
    // UI関連
    public GameObject gamePauseUI;
    // Start is called before the first frame update
    void Start()
    {
        Initialize();
        
    }
    // Update is called once per frame
    void Update()
    {
        TimeManagement();
        
    }
    // ゲーム開始前の状態に戻す
    private void Initialize()
    {
        // スコアを0に戻す
        score = 0;
    }
    public void TimeManagement() 
    {
        gameTime -= Time.deltaTime;
        seconds = (int)gameTime;
        timerText.text = seconds.ToString();
        if (seconds == 0)
        {
            Debug.Log("TimeOut");
            GameOver();
        }
    }
    // スコアの追加
    public void AddScore()
    {
        score += 100;
        currentScore += score;
        scoreText.text = "Score: " + currentScore.ToString();
        Debug.Log(currentScore);
        if (currentScore >= clearScore)
        {
            GameClear();
            //Debug.Log(clearScore);
        }
    }
    // GameOverしたときの処理
    public void GameOver() 
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
    // GameClearした時の処理
    public void GameClear()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
    // 今回の追加
    public void GamePause()
    {
        GamePauseToggle();
    }
    // 今回の追加
    public void GamePauseToggle()
    {
        gamePauseUI.SetActive(!gamePauseUI.activeSelf);
        if (gamePauseUI.activeSelf)
        {
            Time.timeScale = 0f;
        }
        else
        {
            Time.timeScale = 1f;
        }
    }
}
gamePauseUI変数を追加
    // 今回の追加
    // UI関連
    public GameObject gamePauseUI;ゲームが一時停止の間だけ表示させるため、gamePauseUIという変数を定義しました。
GamePauseとGamePauseToggleメソットの追加
    // 今回の追加
    public void GamePause()
    {
        GamePauseToggle();
    }
    // 今回の追加
    public void GamePauseToggle()
    {
        gamePauseUI.SetActive(!gamePauseUI.activeSelf);
        if (gamePauseUI.activeSelf)
        {
            Time.timeScale = 0f;
        }
        else
        {
            Time.timeScale = 1f;
        }
    }if (gamePauseUI.activeSelf) { Time.timeScale = 0f}
はgamePauseUIが表示されている間は、timeScaleが0なので止まっているという状態になり、
else { Time.timeScale = 1f }
で通常の時間に戻るという処理を追加しています。
TimeScaleについてはUnityがリファレンスを出しているので確認してみてください。
https://docs.unity3d.com/ja/2019.4/ScriptReference/Time-timeScale.html
Unity上でPauseUIを反映させる
それでは、Unity上でゲームが開始されて、Pauseボタンを押すとゲームが停止されて、PauseUIが表示されて、Restartボタンを押すとゲームが再開するという設定を反映させます。
画像付きで説明しているので、画像を参考にしながら進めることをおすすめします。

①GameManagementをクリックします
②PauseUIをドラックアンドドロップします

③RestartButtonをクリックします
④プラスボタンをクリックします

⑤RestartButtonをクリックします
⑥GameManagementをドラックアンドドロップします
⑦GamePause()を選択します

⑧PauseButtonをクリックします
⑨GameManagementをドラックアンドドロップします
⑩GamePause()を選択します
当然ですが、上の設定をしなければPauseUIの表示などはできないので、設定しましょう。
Unityを学習する
Udemy動画で勉強する
個人的に、最初のUnityでの開発は動画を見ながら行うことをオススメします。
Udemyには初心者向けから中級者向けなどUnityを教えてくれる教材が揃っていて、割引期間だと数千円で講座を受講できます。
スペシャリストの方の講義が数千円で学べると思うと本当に安いと感心します。
実際に私もいくつかUdemyで課金をして色々学んでいます。
また、Udemyを使ったことがない方も30日返金保証もついているので安心して始めることができます。
まずはお試しで講座を受講してみましょう。
本で勉強する
この本はUnity学習者におすすめです。
内容がとても良くてイラストで重要なポイントは解説されているので、理解しやすいです。
操作する内容は画像付きなので、同じ操作しても同じ動作にならないというようなことはないように工夫されています。
一冊勉強するだけで、大量の知識をインプットできるので、テトリス作成と同時進行で試してみてください。
今回のまとめ

いかがでしたでしょうか?
今回でテトリス作成は完成しました。
テトリス作成を13まで読んでいただき、ありがとうございます。
テトリス作成方法の理解やUnity自体の使い方をこの記事を通して、
学べた方が一人でもいたら嬉しく思います。
最後まで読んでいただきありがとうございました。
 

コメント