サバイバルナイト
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 56/56。
生存者が暗い野原に立ち、夜の間ずっとコウモリが襲ってきます。数秒ごとに1匹、野原の四隅のいずれかから現れます。それぞれのコウモリは生存者に向かってまっすぐ飛び、最初に生存者へたどり着いたコウモリが夜を終わらせます。画面上部の時計は夜明けまでの秒数を数えます。それまで生き延びれば勝ちです。一時停止ボタンですべてが停止し、夜が終わると、「もう一度プレイ」で新しい夜が始まります。
Moveアクションで生存者を歩かせるPlayerスクリプトは作成済みです。GameManagerとBatを作成してください。
チャレンジ
難しい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.timeScale0) を止めて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;
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。