Unity でシンプルなゲーム マネージャーを作成する

Unity の ゲーム マネージャー は、ゲームのコア メカニズムとロジックを監視および制御する中心的なスクリプトまたはシステムです。通常、ゲームの状態 (開始、一時停止、終了など)、プレーヤーの進行状況、スコア、レベル、およびグローバル設定を管理します。ゲーム マネージャーは、プロジェクトの構造をクリーンにし、冗長なコードを回避するために不可欠です。このチュートリアルでは、ゲームの状態とスコアの追跡を処理する基本的なゲーム マネージャーを作成します。

ステップ1: シーンの設定

まず、簡単な Unity シーンを準備します。

  1. 新しい Unity 3D プロジェクトを作成します。
  2. 地面用の Plane やゲームプレイ要素用のいくつかのオブジェクトなど、基本的なレベル レイアウトを追加します。
  3. スコアなどの情報を表示するための UI キャンバスを作成します。

ステップ2: ゲームマネージャースクリプトの作成

ゲーム マネージャーはシングルトンになり、簡単にアクセスでき、ゲーム全体で 1 つのインスタンスのみが存在するようになります。スクリプトを記述してみましょう。

  1. プロジェクト パネルを右クリックし、作成 > C# スクリプト を選択します。GameManager という名前を付けます。
  2. コード エディターでスクリプトを開き、その内容を次の内容に置き換えます。
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance; // Singleton instance

    public int score = 0; // Player's score
    public bool isGameActive = true; // Is the game running?

    void Awake()
    {
        // Ensure there is only one instance of GameManager
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject); // Persist across scenes
        }
        else
        {
            Destroy(gameObject); // Destroy duplicate instances
        }
    }

    // Method to increase the score
    public void AddScore(int points)
    {
        if (isGameActive)
        {
            score += points;
            Debug.Log("Score: " + score);
        }
    }

    // Method to end the game
    public void EndGame()
    {
        isGameActive = false;
        Debug.Log("Game Over!");
        // Additional logic to handle game over, like displaying UI
    }
}

ステップ3: シーンにゲームマネージャーを追加する

次に、ゲーム マネージャーをシーンに追加します。

  1. 階層内に空の GameObject を作成し、GameManager という名前を付けます。
  2. GameManager スクリプトを GameObject にドラッグ アンド ドロップします。
  3. シーン内に重複した GameManager GameObject がないことを確認します。

ステップ4: ゲームプレイロジックの更新

ゲーム マネージャーを利用して、プレイヤーのインタラクションを処理してみましょう。たとえば、ゲーム マネージャーと対話するようにゲームプレイ オブジェクトを変更します。

  1. プレイヤーが操作できるオブジェクト用に、Target という新しいスクリプトを作成します。
  2. ターゲット スクリプトには次のコードを使用します。
using UnityEngine;

public class Target : MonoBehaviour
{
    public int pointValue = 10; // Points awarded for interacting with this target

    void OnMouseDown()
    {
        if (GameManager.Instance.isGameActive)
        {
            // Add points to the score
            GameManager.Instance.AddScore(pointValue);

            // Destroy the target
            Destroy(gameObject);
        }
    }
}

このスクリプトは、プレイヤーがオブジェクトをクリックして操作することを想定しています。衝突やトリガーなどのゲームの仕組みに合わせて調整できます。

ステップ5: スコアを表示する

プレイヤーにスコアを表示するには:

  1. キャンバスに Text UI 要素を作成し、ScoreText という名前を付けます。
  2. ScoreUI という新しいスクリプトを作成し、キャンバスに添付します。
  3. スコア表示を更新するには、次のコードを使用します。
using UnityEngine;
using UnityEngine.UI;

public class ScoreUI : MonoBehaviour
{
    public Text scoreText;

    void Update()
    {
        if (GameManager.Instance != null)
        {
            scoreText.text = "Score: " + GameManager.Instance.score;
        }
    }
}

ScoreText UI 要素をインスペクターの ScoreText フィールドにドラッグします。

ステップ6: ゲームマネージャーのテスト

ゲーム マネージャーをテストするには:

  1. シーンを実行し、ターゲット スクリプトを使用するオブジェクトを操作します。
  2. ターゲットと対話すると、UI でスコアが更新されるのを確認します。
  3. ゲームの終了をテストするには、EndGame メソッドを呼び出します (トリガーまたはボタンを使用するなど)。

オプションの拡張機能

次の機能を使用して、ゲーム マネージャーの機能を拡張できます。

  • レベル管理: 新しいレベルをロードするか、ゲームオーバー時にシーンをリセットします。
  • ゲーム タイマー: プレイヤーに挑戦するためのカウントダウン タイマーを追加します。
  • 進行状況の保存: PlayerPrefs または保存システムを使用して、プレーヤーの進行状況を保存および取得します。
  • 一時停止メニュー: ゲームを停止してオプションを表示する一時停止メニューを実装します。

結論

Unity でゲームの状態とスコアの追跡を管理するためのシンプルなゲーム マネージャーを作成しました。ゲーム マネージャーはコア ロジックを一元管理し、プロジェクトをより整理し、拡張性を高めます。追加機能を試して、ゲーム マネージャーをゲームのニーズに合わせてカスタマイズしてください。