Menu
CoddyTech

サバイバルナイト

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

生存者が暗い野原に立ち、夜の間ずっとコウモリが襲ってきます。数秒ごとに1匹、野原の四隅のいずれかから現れます。それぞれのコウモリは生存者に向かってまっすぐ飛び、最初に生存者へたどり着いたコウモリが夜を終わらせます。画面上部の時計は夜明けまでの秒数を数えます。それまで生き延びれば勝ちです。一時停止ボタンですべてが停止し、夜が終わると、「もう一度プレイ」で新しい夜が始まります。

Moveアクションで生存者を歩かせるPlayerスクリプトは作成済みです。GameManagerとBatを作成してください。

challenge icon

チャレンジ

難しい

Inspector で GameManager に nightLength (15)、spawnEvery (2)、batPrefab、spawnPoints (四隅)、dawnText、pauseButton、pausePanel、endPanel、endText、restartButton を設定します。

  • これはシングルトン (public static GameManager Instance) で、Playing、Paused、Won、Lost を持つネストされた public enum State と、public State state があります。夜は Playing 状態で始まります。
  • Playing 中は、残り秒数が nightLength から減っていき、切り上げて Dawn in 12 のように表示されます。spawnEvery 秒ごとに、ランダムに選ばれた spawnPoints のいずれかにコウモリが出現します。時間がなくなると夜は Won 状態になります。
  • pauseButton は Playing と Paused を切り替えます。Paused 状態ではゲームの時間 (Time.timeScale 0) を止めて pausePanel を表示します。再び Playing 状態になると時間を再開し、パネルを非表示にします。Won または Lost 状態では何もしません。
  • public な Lose() は、Playing 状態の夜を Lost 状態にします。
  • Won 状態と Lost 状態ではゲームの時間を止め、endPanel を表示します。endText には You survived the night! または The bats got you と表示されます。
  • restartButton はシーンを再読み込みして新しい夜を始めます。

Inspector で Bat に speed (2) と reach (1) を設定します。夜が Playing 状態の間、コウモリは自身の高さを保ちながら、Player タグが付いたプレイヤーに向かって speed で飛んでいきます。地面の平面上でプレイヤーとの距離が reach 以内になると、Lose() を呼び出します。

Play を押して、夜明けまで生き残れるように挑戦し、その後 Check を押してください。

自分で試してみよう

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

public class GameManager : MonoBehaviour
{
    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;
}
quiz icon腕試し

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

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