Menu
CoddyTech

夜の終わり

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 60/60。

最後の課題では、状態を管理するマネージャー、時間を止める一時停止機能、2種類のエンディング、時間スケールを元に戻す再スタート機能を備えたゲーム全体を完成させます。

challenge icon

チャレンジ

難しい

一時停止、2種類の終了状態、再スタートを追加します。

  1. pauseButtonはPlayingとPausedだけを切り替えます。PausedではTime.timeScaleを0に設定してpausePanelを表示し、Playingではその両方を元に戻します。
  2. 0秒になると夜はWonになります。WonまたはLostの場合、時間スケールを0にし、endPanelを表示して、endTextにYou survived the night!またはThe bats got youを表示します。
  3. restartButtonは時間スケールを1に設定し、シーンを再読み込みします。

「プレイ」を押し、一時停止して、負けてから、もう一度プレイします。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public enum State { Playing, Paused, Won, Lost }

    public static GameManager Instance;

    public float nightLength = 15f;
    public float spawnEvery = 2f;
    public GameObject batPrefab;
    public Transform[] spawnPoints;
    public TMP_Text dawnText;
    public Button pauseButton;
    public GameObject pausePanel;
    public GameObject endPanel;
    public TMP_Text endText;
    public Button restartButton;

    public State state;

    private float timeLeft;
    private float spawnTimer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        state = State.Playing;
        timeLeft = nightLength;
        ShowDawn();
    }

    void Update()
    {
        if (state != State.Playing) return;

        timeLeft -= Time.deltaTime;
        spawnTimer += Time.deltaTime;
        if (spawnTimer >= spawnEvery)
        {
            spawnTimer -= spawnEvery;
            Transform point = spawnPoints[Random.Range(0, spawnPoints.Length)];
            Instantiate(batPrefab, point.position, Quaternion.identity);
        }
        ShowDawn();
    }

    public void Lose()
    {
        if (state != State.Playing) return;
        state = State.Lost;
    }

    void ShowDawn()
    {
        dawnText.text = "Dawn in " + Mathf.CeilToInt(timeLeft);
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

本格的なゲームを作るのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド