Doinject 1.1.1 Help

シーンコンテクスト空間

シーン全体を一つの大きなコンテクストで包みます。シーンコンテクスト空間が生成されるタイミングのは以下の場合です。

  • SceneContext コンポーネントをシーンに配置した場合、そのシーンがコンテクストに包まれます。

  • SceneContextLoader を経由して別のシーンをロードすると、そのシーンは、現在のコンテクストの子として新たなコンテクスト空間を生成します。

AutoContextLoader を使ってロードする

コンテクスト空間内の任意の場所に、 AutoContextLoader コンポーネントを配置することで、 そのコンテクスト空間の子となるシーンコンテクストやゲームオブジェクトコンテクストをロードできます。

インスペクタの Scene Contexts にロードしたいシーンを指定することで、 AutoContextLoaderの属するコンテクスト空間がロードされた後、自動的に子コンテクストがロードされます。

AutoContextLoader.png

SceneContextLoader を使ってシーンをロードする

各コンテクスト空間に属する DIコンテナには、必ず SceneContextLoader が提供されます。 SceneContextLoader.LoadAsync() にて別のシーンをロードすることで、現在のコンテクストの子となるシーンコンテクストを生成することができます。 SceneContextLoader は、DIコンテナに自動的に登録されるため、 必要な場所で注入してもらいます。

子コンテクストとなるシーンを、ロードするコンポーネントを作ってみましょう。

public class LoadChildScene : MonoBehaviour, IInjectableComponent { [SerializeField] UnifiedScene childScene; SceneContextLoader sceneContextLoader; [Inject] public async Task Construct(SceneContextLoader sceneContextLoader) { this.sceneContextLoader = sceneContextLoader; } [OnInjected] public async Task OnInjected() { await sceneContextLoader.LoadAsync(childScene, active: true); } }

このコンポーネントを、シーンに配置し、インスペクタより childScene にシーンを指定することで、 そのシーンをロードできます。

動作確認

LoadChildScene を EntryPoint となるシーンに配置したら、実行してみましょう。 EntryPoint となるシーンがロードされると、子シーンがロードされることが確認できます。

DI Context Tree を確認すると、親子関係を持ったシーンコンテクストが生成されていることが確認できます。

Last modified: 26 July 2025