本日は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シーンがアンロードされ、シーンのアンロードが完了したタイミングでデバッグログが出力されました。