MRが楽しい

MRやVRについて学習したことを書き残す

VContainerのHelloWorldを試す その10(非同期のエントリポイントを作成する)

本日は VContainer の小ネタ枠です。
VContainerで非同期のエントリポイントを作成する非同期のエントリポイントを作成する方法を記事に残します。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

IAsyncStartable

VContainerとUniTaskの両方がプロジェクトにインポートされている場合、非同期で起動時処理を行うIAsyncStartableが利用できるようになります。
vcontainer.hadashikick.jp

UniTaskがプロジェクトにインポートされていない場合、IAsyncStartableは利用できません。
UniTaskのインポート方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

サンプルプロジェクト

エントリポイントから起動時に非同期でシーン読み込みの処理を行う以下のサンプルスクリプトを作成しました。
・GameLoader.cs

using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using VContainer.Unity;

namespace AsyncProject
{
    public class GameLoader : IAsyncStartable
    {
        public async UniTask StartAsync(CancellationToken cancellation)
        {
            await SceneManager.LoadSceneAsync("AddScene", LoadSceneMode.Additive);
            
            Debug.Log("Scene Loaded!");
        }
    }
}

サンプルスクリプトのクラスをLifetimeScopeでエントリポイントに追加するようにします。
・GameLifetimeScope.cs

using VContainer;
using VContainer.Unity;

namespace AsyncProject
{
    public class GameLifetimeScope : LifetimeScope
    {
        protected override void Configure(IContainerBuilder builder)
        {
            // GameLoaderをVContainerのEntryPointに登録する
            builder.RegisterEntryPoint<GameLoader>();
        }
    }
}

シーンを再生して動作を確認します。
起動時処理を非同期で実行することができ、シーン読み込みが完了するとともにログが表示されました。