質問: Camera.main.ScreenToWorldPoint( screenPos ); return mousePos; } } ``` ``` Debug.Log( MouseManager.MousePos() ); ``` とするのでは、同じ出力結果を得ることができると思うのですが、調べると、共通の機能をもたせたい場合にはSingletonの使用が推奨されているように感じます。 〜Managerを作りたい時にsingletonを使うべき理由やstaticとの違いについて教えて下さい。
回答: 前者のコード例がSingletonになっていないのですがそれは本題ではないので置いておくことにして。 確かにプログラムを書くだけならstaticメソッドを提供すれば十分と言えます。ではなぜわざわざSingletonでオブジェクトを用意してそれ経由でアクセスさせるか? キーワードは「疎結合」です。 オブジェクトにするなら、MouseManager.Instance のようにオブジェクトを直接呼ぶ他にも、MouseManager型からinterfaceを抽出しておき、interface型のフィールドで参照しておいてそれを叩くということができます。 interface経由で呼ぶようにすれば「呼ぶ側と呼ばれる側は、使い方だけ知っていてお互いの中身を知らない」状態にできます。 こうすると、修正の影響が他部位に波及しにくくなるとか、ユニットテストするときにダミーのオブジェクトを代わりに渡すとかの効果が得られます。 これが疎結合の考え方です。