こんにちは。以前にもこちらでSingletonとstaticの違いについて教えていただいたのですが、やはりどうしてもわからないことがあるので教えて下さい。
たとえば、マウスの座標を取得するMouseManagerを作成する場合に、
singletonとして
C#
1public class MouseManager : MonoBehaviour 2{ 3 // シングルトン ================================================================= 4 public static MouseManager Instance; 5 void Awake() 6 { 7 if( Instance != null ) Destroy( gameObject ); // すでに存在しているなら削除 8 else Instance = this; // 存在していないなら指定する 9 DontDestroyOnLoad( gameObject ); // シーン遷移では破棄させない 10 } 11 12 // マウスの座標を取得 13 // @return マウスの座標(Vector3) 14 public Vector3 MousePos() 15 { 16 // Vector3でマウスのスクリーン座標を取得する 17 Vector3 screenPos = Input.mousePosition; 18 // Z軸の修正(メインカメラとオブジェクトの距離) 19 screenPos.z = Camera.main.transform.position.z; 20 // スクリーン座標をワールド座標に変換 21 Vector3 mousePos = Camera.main.ScreenToWorldPoint( screenPos ); 22 return mousePos; 23 } 24}
C#
1Debug.Log( MouseManager.Instance.MousePos() );
とするのと、staticとして、
C#
1public class MouseManager : MonoBehaviour 2{ 3 // マウスの座標を取得 4 // @return マウスの座標(Vector3) 5 public static Vector3 MousePos() 6 { 7 // Vector3でマウスのスクリーン座標を取得する 8 Vector3 screenPos = Input.mousePosition; 9 // Z軸の修正(メインカメラとオブジェクトの距離) 10 screenPos.z = Camera.main.transform.position.z; 11 // スクリーン座標をワールド座標に変換 12 Vector3 mousePos = Camera.main.ScreenToWorldPoint( screenPos ); 13 return mousePos; 14 } 15}
C#
1Debug.Log( MouseManager.MousePos() );
とするのでは、同じ出力結果を得ることができると思うのですが、調べると、共通の機能をもたせたい場合にはSingletonの使用が推奨されているように感じます。
〜Managerを作りたい時にsingletonを使うべき理由やstaticとの違いについて教えて下さい。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/03 16:06
2016/03/04 00:36