MRが楽しい

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

Unityで読み込み中のシーンをアンロードする

本日はUnityの小ネタ枠です。
読み込み中のシーンをアンロードする方法についてです。

シーンをアンロードする

UnloadSceneAsync関数を使ってシーンをアンロードできます。
シーンはシーン名、シーンパス、ビルドインデックスで指定できます。
docs.unity3d.com

UnloadSceneAsync関数は非同期で実行されるため、アンロードの完了を検知したい場合にはsceneUnloadedイベントを受け取る必要があります。
docs.unity3d.com

なお、同期的にシーンをアンロードするUnloadScene関数は利用が非推奨になっています。

サンプルスクリプト

関数呼び出しで特定のシーンのアンロードを実行し、その完了をデバッグログで通知するサンプルスクリプトを作成しました。
・UnloadSceneTest.cs

using UnityEngine;
using UnityEngine.SceneManagement;

public class UnloadSceneTest : MonoBehaviour
{
    [ContextMenu("UnLoadSceneTest")]
    public async void UnLoadSceneTest()
    {
        // Environmentシーンを非同期でアンロードする
        SceneManager.UnloadSceneAsync("Environment");
    }
    
    public void Start()
    {
        // シーンのアンロードが完了した時に呼び出されるイベントハンドラを登録する
        SceneManager.sceneUnloaded += OnSceneUnloaded;
    }

    private void OnSceneUnloaded(Scene current)
    {
        // アンロードされたシーンの情報を表示する
        Debug.Log($"シーン名:{current.name}, シーンインデックス:{current.buildIndex}, シーンパス:{current.path}");
    }
}

以下の通りEnvironmentシーンがアンロードされ、シーンのアンロードが完了したタイミングでデバッグログが出力されました。