2014.10.09何を隠そう、ここ2年ほど仕事でUnityを使っているオイラです。UnityでC#のScriptを作成しようとすると、デフォルトでMonoBehaviourクラスを継承したクラスが作成される。このMonoBehaviourクラスはUnityとやり取りするための様々な機能がすでに実装されていてとても便利。個々のGameObjectが独立して動作させるような時には自由度が高くて良いんだけど、この自由度が逆に管理しづらいこともあるのです。ゲーム全体を一元管理する情報を扱うような場合、あるいは外部のアプリケーションやKinectみたいなセンサーとやり取りするインターフェイスを作る場合、そのクラスのインスタンスは唯一にしておきたい。知らないうちに複数出来ちゃったら大混乱だ。いうことで、MonoBehaviourクラスの便利さを保ったままシングルトンにする方法を探したら、良い方法を見つけた。Japanのエバンジェリスト伊藤さんが翻訳したこの記事↓http://warapuri.tumblr.com/post/28972633000/unity-50-tips29、シングルトンは便利だこんな感じで自動的にシングルトンが作られるようにしておくといい。GUIManager.とかマネージャーに役に立つ。スポンサーリンクマネージャーではない固有インスタンス(プレイヤーとか)にシングルトンを使うのは止めよう。(以下略)クラスの外側から利用されるために、staticなプロパティと関数を定義しておこう。しておくと、GameManager.Playerと書けるようになる(GameManager.Instance.playerという書き方ではなく)あとはこれを継承して任意のクラスを作るだけ。DontDestroyOnLoad(this.gameObject);という記述を加えれば、Script(MonoBehaviourクラス)の親となるGameObjectがシーン遷移後も存続するようになる。Unityは、ささっと動く物を作るには本当に便利だけど、ややカチッとしたものを作ろうとするとMonoBehaviourクラスの特殊さが壁になっちゃったりもする。システム開発してた人間からすると、MVCにならない時点で頭を抱えちゃうんだけど、Unityに適した設計方法ってのをのんびり模索していきたい。上手く長所を活かせる方法が見つかるといいなぁ。コメントデータの処理方法の詳細はこちらをご覧ください。toProfileNegativeMind都内で働くソフトウェア系エンジニア・リサーチャー。大学・大学院では3DCGのレンダリングアルゴリズムを研究してた。Mayaを使って映像制作もできるようになった。特撮・模型趣味も再燃。最近はPhotogrammetryや機械学習について勉強中。