短編RPG制作(Unity2D)【第40回】勉強:シングルトン


シングルトン

以前からちょくちょく名前を目にする「シングルトン」について勉強します。
シングルトンの定義としては、「そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターン」だそうです。
デザインパターンということで、Unity C#に固有の機能というわけではなく、あくまでテクニックというか設計関連の用語みたいです。
さて、ここで大きな問題なのが、私がインスタンスについて正確に理解できていないということです。いままでも何回か調べた覚えはあるのですが、いい機会なのでまとめてここに記録しようと思います。

クラス

そもそものクラスについてです。
私も色々と作っています。「PlayerStatus」とか「EnemyStatus」とかですね。過去記事の「スクリプト」はすべて「クラス」と同義です。Unityでは各スクリプトファイルに1つずつクラスを作成できます。(複数作成できるのかもしれないですが、私はこの認識です。)
イメージとしては、関連した機能をまとめておく単位、といったところでしょうか。よく「インスタンス」と関連付けて「設計図」と称されることも多いみたいです。

インスタンス

クラスを元に生成されるオブジェクトのことです。クラスをオブジェクト化することをインスタンス化とも言います。ゲームオブジェクトにスクリプトをアタッチすることもインスタンス化と言えるでしょう。

インスタンスには大きく分けて2つの種類があります。

  • 変数が独立しているもの

  • 元のクラスの参照を扱うもの

前者は、「new演算子」を用いて生成することができます。用途は様々ですが、私の場合、ベクトルなどの計算要素を作るために使うことが多いです。

後者は、"GetComponent"やSerializeField属性持ちの変数へのスクリプト割り当てによって参照できます。主に、プレイヤーや敵キャラクターのステータス操作に使っています。

コンストラクタ

インスタンスを生成する際に呼び出されるメソッド。
クラスの中に、クラスと同名のメソッドを作ることで定義できる。一つのクラスに複数のコンストラクタを定義することも可能。(引数の種類は変える必要がある)

まとめ

シングルトンの勉強ではなくインスタンス関連の再確認になってしまいました。
しかし、インスタンスを格納する変数(だと思っている)にはアンダーバーを付けていたので、今回勉強したことでそれらが間違っていたら分かるようになりました。適宜修正していきます。
次回はシングルトンの内容について勉強します。

この記事が気に入ったらサポートをしてみませんか?