はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】事前ロード,アンロードを実装する(AsyncOperation.allowSceneActivation)

はじめに

今回はあらかじめシーンのロードを行っておき,任意のタイミングでシーンの読み込みを完了するような処理を実装していきたいと思います。

例えばフェードアウトの処理をしている間に、次のシーンのロードを裏で行ってしまうみたいな使い方ですね。

実装もさほど重いものではないので、試してみる価値はあると思います。

事前ロード

ロードが完了したときにシーンのアクティブ化を許可するかどうかをAsyncOperation.allowSceneActivationにより設定できます。
docs.unity3d.com


使い方は以下のような感じ。

public IEnumerator Start()
{
    // 非同期でロードを行う
    var asyncLoad = SceneManager.LoadSceneAsync("SceneName");

    // ロードが完了していても,シーンのアクティブ化は許可しない
    asyncLoad.allowSceneActivation = false;

    // フェードアウト等の何かしらの処理
    yield return FadeOut();

    // ロードが完了したときにシーンのアクティブ化を許可する
    asyncLoad.allowSceneActivation = true;

    // ロードが完了するまで待つ
    yield return asyncLoad;

}

public IEnumerator FadeOut()
{
    yield return new WaitForSeconds(10);
}

こんなことも

AsyncOperation .allowSceneActivationはシーンのアンロードや,マルチシーンエディティングなんかにも同様にできます。

// シーンのアンロード
var asyncLoad = SceneManager.UnloadSceneAsync("SceneName");
// マルチシーンエディティングでもOK
var asyncLoad = SceneManager.LoadSceneAsync("SceneName", LoadSceneMode.Additive);

さいごに

ロードはよっぽどな理由がない限り少ないことに越したことがないので,積極的に利用していくと良いと思います。

良かったら使ってみてください。

ではまた。