![見出し画像](https://assets.st-note.com/production/uploads/images/62031579/rectangle_large_type_2_01519232655c17eb2ee322a407913079.png?width=1200)
ダンスゲーを作りたい#31 【内部処理】今後使う独自の仕様を一旦簡単にまとめておく。
ここまでなんか色んなマネージャを作ってきましたが、今後もバンバン登場する予定な割に概要を毎回書くのは面倒なので一回まとめます。
基本全部スクリプトベースで全部管理するパワープレイな仕組みです。
自作マネージャ、いろいろあるから一応紹介しておく
詳細は過去記事に書いていたり書いてなかったりますが、簡単な内容と呼び出し方だけ改めて紹介しておきます。
一部省略していますが、大体これで全部です。
青はマネージャ同士でしか使わないようなもの、赤はよくスクリプトから呼び出すものですが、立場は一緒です。
内容としては過去記事でも一部紹介していますが、画像で紹介している内容をスクリプトに起こしただけの完全自作品なので、真似する場合は自分で作ればよろしいと思います。
上記の役割を持つマネージャをManagerクラスにまとめて、GameObjectにアタッチさせ、一般的なスクリプトからはgameobject経由でコンポーネントとして呼び出してます。
呼び出しの仕組みが面倒だし取得のたびにGetComponentが発生しますが、正直Unity環境下での普通のクラスのinstanceの仕様よくわかんないし、値の恒常性を確保したかった関係上こうしました。
スクリプトのクラスはメンバに
Manager Manager{
get{return GameObject.Find("Manager").GetComponent<Manager>();}
}
と記しておくことで、Staticクラスみたいに
Manager.PhaseManager.SetPhase(画面ID);
とやって呼び出すことができ、↑で言えば指定した画面に遷移する処理がこれだけでできる仕組みになります。
まぁManagerを作成する段階ではちまちま画面を作成する処理とかたくさん書かなきゃいけないことに変わりはないですけどね。
PhaseManager
以降は画面ベースでお話を進めていきたいので、画面管理の仕様だけ改めて書いておきます。
なんか前も書いた気がしますが、本ゲームでは表示中の画面をPhaseManagerという子が管理しています。
独自に追加したPhaseの概念では、PhaseとLayer1~3の要素を持っており、すべての画面にIDを割り振って、
Phaseで、画面の大区分、例えばスタート、ホーム、プレイのような、根底から画面を切り替える場合の分類を、
Layer1で、ホームPhaseのクエスト画面、ガチャ画面といった形の同じPhase内での遷移を、
Layer2はリスト型の大きなPOPUP、Layer3は内容を表示するだけの小型POPUPの管理をします。
PhaseManagerは値がセットされると遷移できるか判定し、可能であれば描画処理部分に処理を流して画面を描画させます。
描画の方法はシンプルですが流れとやってる人が少し複雑です。
sceneにはこんな感じでキャンバスの中に各Layerのパネルを用意しておきます。
PhaseManagerにPhaseが設定されるとLayer1の中身を全部消してPhaseに対応するプレハブをLayer1に代入します。これはPrintManagerの仕事です。
Layer1にセットされるプレハブ内のオブジェクトには、MonoBehaviourを継承してPhaseManagerからの呼び出し処理を受け取れる形にした独自クラスを継承したスクリプトをアタッチしており、
同じPhase内での画面遷移時は、
1.PhaseManagerに遷移したい画面をセット
2.PhaseManagerが遷移可能か判定
3.OKならLayer1のオブジェクトが持つ独自クラスの遷移時処理を呼び出し
4.各Layer1オブジェクト内でIDを受け取り遷移処理を実行
という流れでできるようになってます。
なので、同じPhase内での画面遷移で実際に画面を動かすのはLayer1のオブジェクトにアタッチされたスクリプトです。
Layer2,3のPOPUPはまたちょっと違って、
1.PhaseManagerにポップアップIDをセット
2.上記と同じ流れでLayer1のオブジェクトの独自クラスに処理が戻ってくる
3.処理内でPOPUPに表示したい内容をGameObjectにくるめてを完成させる
4.PrintManagerにGameObjectを送り、枠内に入れてPOPUPとして表示
という流れです。
要はLayer1のオブジェクトにアタッチされたスクリプト内の独自クラスの処理内で表示内容を作成し、PrintManagerが表示するってことです。
あと、おまけですがロード画面も表示します。PhaseManagerにロード開始を通知するとロード画面を表示し、開始と終了の数が一致したらロード画面を消すっていう処理があります。
こんだけ書いとけば十分でしょう。
要はこういうマネージャがあるから、うちでは画面遷移はそういう呼び出し方するよっていう話です。
以上、そろそろちゃんと画面作っていきたいですね。
この記事が気に入ったらサポートをしてみませんか?