夜の終わり
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 60/60。
最後の課題では、状態を管理するマネージャー、時間を止める一時停止機能、2種類のエンディング、時間スケールを元に戻す再スタート機能を備えたゲーム全体を完成させます。
チャレンジ
難しい一時停止、2種類の終了状態、再スタートを追加します。
pauseButtonはPlayingとPausedだけを切り替えます。PausedではTime.timeScaleを0に設定してpausePanelを表示し、Playingではその両方を元に戻します。- 0秒になると夜はWonになります。WonまたはLostの場合、時間スケールを0にし、
endPanelを表示して、endTextにYou survived the night!またはThe bats got youを表示します。 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);
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
本格的なゲームを作るのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド