備忘録の続き。全体を管理するオブジェクトとして「GameManager」を配置するにあたり、
Unity 2Dアクションの作り方【ゲームマネージャーを作ろう】
(https://dkrevel.com/makegame-beginner/make-2d-action-game-manager/)
を参考にシングルトンの考え方を考慮したGameMnagerにしました。前回のベースとなっている参考サイトさんのチュートリアルに従って作ったリッチテキストの分も含めて、当面使わない機能ですが雛形には入れときました。
thisを考える
GManager.csにさらっと出てくる
Instance = this;
のthisは、左辺がわざわざ「Instance」などと銘打ってあるし(検索すれば、thisはインスタンスを示すともでてきますね)、インスタンスでなければこの後、他のファイルから各関数の呼び出しが出来ないので結果から推測すればインスタンスでしかないのですが、確認のためちょっと実験してみました。
ひとまずこの行をコメントアウトして、MonoBehaviourを継承するクラスはnewしてインスタンスを作ると、エラーになって(なりました。コンパイラに怒られた。)しまうので、
//Instance = this;
Instance = gameObject.AddComponent<GManager>();
コンパイラに怒られた時に、この書式で表現しなさいと書いてあった書式で通したら動きました。Unity先生のサイトの真ん中あたりに
AddComponentの戻り値は追加したコンポーネントインスタンス
【Unity基礎】GameObjectの使い方(生成や削除など)全て解説 – 渋谷ほととぎす通信 (shibuya24.info)
と書いてあります。この解釈だと右辺に出来たGManager型のインスタンスへのアドレスを左辺の変数に格納するということになるのかな。
一応納得いったので、他のファイル(MainTextController.cs)からこんな感じで
mainTextObject.text = GManager.Instance.userScriptManager.GetCurrentSentence();
とか呼び出す文の頭の部分(GManager.Instance)も違和感を覚えず普通に見えてきました。
コメント