UnityのSceneManagerクラスについて


SceneManagerクラスは、Unityでシーンを管理し、シーン間の遷移やロードを行うためのクラスです。本資料では、シーンのロード、アンロード、非同期ロード、シーンの情報取得について解説します。シンプルなコード例を使って、SceneManagerの基本的な使い方を学びましょう。

シーンのロード

シーンをロードするには、SceneManager.LoadScene()を使用します。シーンは名前またはインデックスで指定できます。

シーン名でのロード

using UnityEngine.SceneManagement;

SceneManager.LoadScene("MainScene");

インデックスでのロード

using UnityEngine.SceneManagement;

SceneManager.LoadScene(1);

このコードでは、MainSceneという名前のシーン、またはビルド設定のインデックス1のシーンをロードします。


非同期でのシーンロード

非同期ロードを行うことで、ゲームのメインスレッドがブロックされることなくシーンを読み込むことができます。非同期ロードを使用すると、ローディング画面を表示しながらシーンの読み込みを行うことができます。

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class SceneLoader : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(LoadYourAsyncScene());
    }

    IEnumerator LoadYourAsyncScene()
    {
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("MainScene");

        // シーンが読み込まれるまで待機
        while (!asyncLoad.isDone)
        {
            // ローディング画面の進行状況を表示できます
            Debug.Log("Loading progress: " + asyncLoad.progress);
            yield return null;
        }
    }
}

このコードでは、MainSceneを非同期でロードし、シーンがロードされるまで待機します。asyncLoad.progressを使用してローディング進行状況を表示することも可能です。


シーンのアンロード

現在ロードされているシーンをアンロードすることができます。UnloadSceneAsync()を使うと、シーンを非同期でアンロードできます。

using UnityEngine.SceneManagement;

SceneManager.UnloadSceneAsync("OldScene");

このコードは、OldSceneというシーンを非同期でアンロードします。


現在のシーンを取得する

現在アクティブなシーン(プレイヤーが操作中のシーン)を取得することができます。

using UnityEngine.SceneManagement;

Scene currentScene = SceneManager.GetActiveScene();
Debug.Log("現在のシーン名: " + currentScene.name);

このコードでは、現在のシーン名を取得してログに表示します。


シーンの追加ロード(マルチシーン)

複数のシーンを同時にロードすることができます。例えば、シーンAにシーンBを追加してロードしたい場合は、LoadSceneMode.Additiveを使用します。

using UnityEngine.SceneManagement;

SceneManager.LoadScene("SceneB", LoadSceneMode.Additive);

このコードでは、現在のシーンにSceneBを追加でロードします。これにより、複数のシーンを同時に表示できます。


注意事項

  • シーン名やインデックスを使用する場合は、ビルド設定でシーンが正しく追加されていることを確認してください。
  • SceneManager.LoadScene()を使用するとデフォルトで前のシーンはアンロードされますが、LoadSceneMode.Additiveを使うことで複数のシーンを同時にロードすることができます。

まとめ

UnityのSceneManagerクラスを使用することで、シーンのロードやアンロード、非同期ロードが簡単に行えます。本資料では基本的な操作について解説しましたが、これらを応用して複雑なシーン管理も可能です。シーンの遷移やロード方法を学んで、よりインタラクティブなゲームやアプリを作成してみてください。

Unity

Posted by hidepon