Menu
CoddyTech

ゲームの状態

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

ゲームは一度に1つの状態になります。プレイヤーを待っている、実行中、または終了です。isPlayingやisOverのようなboolを2つ使うと、誤って両方がtrueになってしまうことがあります。また、"Playng"のような文字列はコンパイルできても一致することはありません。C#には、選択肢の固定リストを表す型、enumがあります。この横断歩道の信号では、次のように使います。

public enum Signal { Red, Yellow, Green }

public class Crossing : MonoBehaviour
{
    public Signal signal;

    void Update()
    {
        if (signal == Signal.Red && Input.GetMouseButtonDown(0))
        {
            signal = Signal.Green;
            Debug.Log("Walk!");
        }
    }

    public bool CanWalk()
    {
        return signal == Signal.Green;
    }
}

enum Signal { Red, Yellow, Green }は、Signal.Red、Signal.Yellow、Signal.Greenと表記する、ちょうど3つの値を持つ新しい型を作ります。Signalフィールドは一度にそのうちの1つを保持し、==で比較し、=で変更します。Signal.Grenのようなスペルミスはコンパイルエラーになるため、Playを押す前に間違いがわかります。

enumはクラスの外で宣言されているため、どのスクリプトからもSignalを使うことができ、歩行者のスクリプトからcrossing.CanWalk()を呼び出せます。新しいenumフィールドは、ここではRedという最初の値から始まります。Inspectorでは、publicのenumフィールドは値のドロップダウンリストとして表示されます。内部では、各値は0から数えた数値です。(int)Signal.Greenは2です。

challenge icon

チャレンジ

簡単

溶岩に触れずに床を渡りましょう。GameManager(シングルトン)とLavaスクリプトは用意されています。ゲームに状態を設定しましょう。

  • GameManager.csで、クラスの上に、値が順にReady、Playing、GameOverの列挙型GameStateを宣言し、GameManagerにGameState型のstateというpublicフィールドを追加します。ゲームはReady状態で開始します。
  • ゲームがReady状態の間にSpaceキーを押すと開始します。状態がPlayingになり、Go!がログに出力されます。
  • LavaはHitLava()を呼び出します。ゲームがPlaying状態の間にこれが呼び出されると、ゲームが終了します。状態がGameOverになり、Game overがログに出力されます。終了したゲームはSpaceキーを押しても再開しません。
  • Player.csでは、状態がPlayingの間だけ矢印キーでプレイヤーを動かせるようにします。

Playを押し、Spaceキーを押す前に矢印キーを試してから、溶岩に向かって歩き、最後にCheckを押します。

自分で試してみよう

using UnityEngine;

// ここで GameState enum を宣言する: Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // state という名前の public な GameState フィールド

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // Ready の間、Space キーでゲームを開始し、Go! をログに出力する
    }

    public void HitLava()
    {
        // Playing の間、ゲームを終了し、Game over をログに出力する
    }
}
quiz icon腕試し

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

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