【Unity】アタッチされていないシングルトンの作成
「アタッチしない」シングルトンパターンを実装するために、以下のようなC#スクリプトを使用することができます。このパターンは、特定のクラスに対して唯一のインスタンスを確保し、全体のゲーム中で簡単にアクセス可能にするためのものです。
シングルトンで作られたスクリプト
public class GameManager
{
private static GameManager instance;
public static GameManager Instance
{
get
{
if (instance == null)
{
instance = new GameManager();
}
return instance;
}
}
// 例えば、ゲームスコアを管理するプロパティ
public int Score { get; set; }
// コンストラクタを private にすることで、外部からのインスタンス化を防ぐ
private GameManager()
{
// 初期化コード
Score = 0;
}
// その他のメソッド
public void AddScore(int points)
{
Score += points;
}
}
このスクリプトでは、GameManager
クラスに静的な Instance
プロパティを提供しています。このプロパティは、クラスのインスタンスがまだ作成されていない場合に新しいインスタンスを作成し、すでに存在する場合はそのインスタンスを返します。この方式により、GameManager.Instance
を通じてどこからでもアクセスでき、簡単にゲームの状態を管理できます。
また、コンストラクタは private
に設定されているため、このクラスは外部から直接インスタンス化することができません。これにより、シングルトンパターンの要件を満たしています。シングルトンインスタンスに対する操作やデータアクセスは、すべて GameManager.Instance
を通じて行います。
アタッチされているスクリプトからのアクセス
Unityでシングルトンインスタンスにアクセスし、そのメソッドを呼び出すためには、シングルトンパターンを適用したクラス(例えば上記のGameManager
クラス)を利用します。以下は、シングルトンインスタンスのGameManager
にアクセスし、スコアを更新するためのサンプルスクリプトです。
この例では、Player
クラスを作成し、プレイヤーがポイントを獲得するたびにGameManager
のスコアを更新するメソッドを呼び出します。
using UnityEngine;
public class Player : MonoBehaviour
{
void Start()
{
// ゲーム開始時にスコアを0にリセット
GameManager.Instance.Score = 0;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // スペースキーを押した場合
{
ScorePoints(10); // スコアを10点加算
}
}
private void ScorePoints(int points)
{
// GameManagerのインスタンスを通じてスコアを加算
GameManager.Instance.AddScore(points);
// 現在のスコアをコンソールに表示
Debug.Log("Current Score: " + GameManager.Instance.Score);
}
}
このスクリプトをUnityエディター内でゲームオブジェクトにアタッチして使用します。プレイヤーがスペースキーを押すたびに、ScorePoints
メソッドが呼び出され、GameManager
のAddScore
メソッドを通じてスコアが加算されます。これにより、GameManager
のスコアが更新され、その変更がすべてのスクリプトからアクセス可能になります。
この方法で、シングルトンオブジェクトのメソッドを簡単に呼び出し、ゲーム全体で共有するデータを効率的に管理することができます。
ディスカッション
コメント一覧
まだ、コメントがありません