UnityのMonoBehaviourクラスをシングルトン化する

何を隠そう、ここ2年ほど仕事でUnityを使っているオイラです。

UnityでC#のScriptを作成しようとすると、デフォルトでMonoBehaviourクラスを継承したクラスが作成される。このMonoBehaviourクラスはUnityとやり取りするための様々な機能がすでに実装されていてとても便利。ただ、個々のGameObjectが独立して動作させるような時には自由度が高くて良いんだけど、この自由度が逆に管理しづらいこともあるのです。
例えば、ゲーム全体を一元管理する情報を扱うような場合、あるいは外部のアプリケーションやKinectみたいなセンサーとやり取りするインターフェイスを作る場合、そのクラスのインスタンスは唯一にしておきたい。知らないうちに複数出来ちゃったら大混乱だ。

ということで、MonoBehaviourクラスの便利さを保ったままシングルトンにする方法を探したら、良い方法を見つけた。


スポンサーリンク

Unity Technologies Japanのエバンジェリスト伊藤さんが翻訳したこの記事↓
http://warapuri.tumblr.com/post/28972633000/unity-50-tips


スポンサーリンク

29、シングルトンは便利だ

こんな感じで自動的にシングルトンが作られるようにしておくといい。

シングルトンはParticleManager とか AudioManager とか GUIManager.とかマネージャーに役に立つ。

  • マネージャーではない固有インスタンス(プレイヤーとか)にシングルトンを使うのは止めよう。(以下略)
  • クラスの外側から利用されるために、staticなプロパティと関数を定義しておこう。こうしておくと、GameManager.Playerと書けるようになる(GameManager.Instance.playerという書き方ではなく)

あとはこれを継承して任意のクラスを作るだけ。例えばこんな感じ。

そして、同じような要件でシーン遷移後もMonoBehaviourクラスを破棄せずに存続させたい場合は、上記のようにAwake()メソッドでの初期化時に

という記述を加えれば、Script(MonoBehaviourクラス)の親となるGameObjectがシーン遷移後も存続するようになる。

Unityは、ささっと動く物を作るには本当に便利だけど、ややカチッとしたものを作ろうとするとMonoBehaviourクラスの特殊さが壁になっちゃったりもする。
システム開発してた人間からすると、MVCにならない時点で頭を抱えちゃうんだけど、Unityに適した設計方法ってのをのんびり模索していきたい。上手く長所を活かせる方法が見つかるといいなぁ。


スポンサーリンク

関連記事

UnityでTweenアニメーションを実装できる3種類の無料Asset
OpenCV 3.1のsfmモジュールのビルド再び
Web経由でRaspberry PiのGPIOを操作したい
pythonもかじってみようかと
OpenCV 3.1から追加されたSfMモジュール
Mechanizeで要認証Webサイトをスクレイピング
書籍『3次元コンピュータビジョン計算ハンドブック』を購入
OpenCV3.3.0でsfmモジュールのビルドに成功!
ZScript
Unity MonoBehaviourクラスのオーバーライド関数が呼び出される順番
RSSフィードを読込んで表示するWordpressプラグイン『RSSImport』
3Dボリュームデータ処理ライブラリ『OpenVDB』
Unityをレンダラとして活用する
映像ビジネスの未来
OpenCV 3.1のsfmモジュールを試す
書籍『ROSプログラミング』
Unityの新しいGUI作成システム『uGUI』
機械学習手法『Random Forest』
OpenCVベースのコンパクトなARライブラリ『ArUco』
『手を動かしながら学ぶエンジニアのためのデータサイエンス』ハンズオンセミナーに行ってきた
オープンソースの顔認識フレームワーク『OpenBR』
OpenCV 3.1とopencv_contribモジュールをVisual Studio 2015で...
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『TouchScript』
OpenGVの用語
Unityの各コンポーネント間でのやり取り
iPhone x ロボットハッカソン~RomoのiPhone用SDKで目覚ましアプリを作る~
3分の動画でプログラミングを学習できるサイト『ドットインストール』
ブログが1日ダウンしてました
オープンソースの物理ベースレンダラ『Mitsuba』をMayaで使う
C#で使えるNumPyライクな数値計算ライブラリ『NumSharp』
UnityプロジェクトをGitHubで管理する
機械学習に役立つPythonライブラリ一覧
書籍『仕事ではじめる機械学習』を読みました
複数視点画像から3次元形状を復元するライブラリ『openMVG』
ポリゴンジオメトリ処理ライブラリ『pmp-library (Polygon Mesh Process...
オープンソースのStructure from Motionライブラリ『Theia』
R-CNN (Regions with CNN features):ディープラーニングによる一般物体...
C++の抽象クラス
フォトンの放射から格納までを可視化した動画
Twitter APIのPythonラッパー『python-twitter』
Mayaのプラグイン開発
konashiのサンプルコードを動かしてみた

コメント