今回は Zenject で、シーンをまたいで Inject する方法です。
Manager シーンには各ステージ共通で利用される GameManager、UIなどを置き、StageX シーンでは各ステージ固有の地形や敵の配置を作り込む感じです。
「Manager シーンと Stage1 シーン」「Managerシーン と Stage2 シーン」という組み合わせで各ステージが動作する仕組み。
これがどれくらい一般的なのか、パフォーマンスはどうなのか等、詳しいことはよく分かりませんが、共通のオブジェクトを各シーンにコピペするよりも、たしかにスマートな感じはします。(あとでちゃんと勉強します)
しかし、他のシーンのオブジェクトやコンポーネントを参照しようとすると、1シーン内で完結しているときよりもちょっと複雑になります。
方法は、こちらの記事の「マルチシーンでシーンをまたいでインジェクトする」に書かれているとおりです。
あとはこちらの記事で紹介したものから変更なし。
これで問題なくシーンをまたいで、StageX 側(子シーン)にあるクラスから、Manager シーン(親シーン)側でバインドされているコンポーネントを Inject できます。
※ SceneDecoratorContext を使うと実現できるらしいのですが、なぜかうまくいかず。。。
まだまだ奥が深そうな Zenject ですが、検証はいったんここまでに留めて、この先は必要に迫られたときに掘っていきたいと思います。
今回は以上です。
Manager シーンと StageX シーンに分けてあるのを見かける
Unity でのゲーム制作で、Manager シーンと StageX シーンに分けて作る方法をたまに見かけます。Manager シーンには各ステージ共通で利用される GameManager、UIなどを置き、StageX シーンでは各ステージ固有の地形や敵の配置を作り込む感じです。
「Manager シーンと Stage1 シーン」「Managerシーン と Stage2 シーン」という組み合わせで各ステージが動作する仕組み。
これがどれくらい一般的なのか、パフォーマンスはどうなのか等、詳しいことはよく分かりませんが、共通のオブジェクトを各シーンにコピペするよりも、たしかにスマートな感じはします。(あとでちゃんと勉強します)
しかし、他のシーンのオブジェクトやコンポーネントを参照しようとすると、1シーン内で完結しているときよりもちょっと複雑になります。
簡単にできるよ。そう、Zenject ならね
Zenject ならシーンをまたいで、StageX シーンのクラスで Manager シーンのコンポーネントを Inject するようなことが簡単にできます。方法は、こちらの記事の「マルチシーンでシーンをまたいでインジェクトする」に書かれているとおりです。
やってみた
実際にやってみました。Manager シーンの設定
Manager シーンの SceneContext の Contract Names の Size を 1 にして、Element 0 に Manager と入力します。StageX シーンの設定
StageX シーンにも SceneContext を置きます。こちらは Parent Contract Names の Size を 1 にして、Element 0 に Manager と入力します。あとはこちらの記事で紹介したものから変更なし。
これで問題なくシーンをまたいで、StageX 側(子シーン)にあるクラスから、Manager シーン(親シーン)側でバインドされているコンポーネントを Inject できます。
今回の方法では、親シーンから子シーンのバインドを見に行くことはできない
ただし今回の方法(SceneContext の親子関係設定)では、逆方向、Manager シーン(親シーン)側のクラスで、StageX シーン(子シーン)側にバインドされているコンポーネントを Inject することはできません。※ SceneDecoratorContext を使うと実現できるらしいのですが、なぜかうまくいかず。。。
まだまだ奥が深そうな Zenject ですが、検証はいったんここまでに留めて、この先は必要に迫られたときに掘っていきたいと思います。
今回は以上です。
コメント