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
クラスを使用することで、シーンのロードやアンロード、非同期ロードが簡単に行えます。本資料では基本的な操作について解説しましたが、これらを応用して複雑なシーン管理も可能です。シーンの遷移やロード方法を学んで、よりインタラクティブなゲームやアプリを作成してみてください。
ディスカッション
コメント一覧
まだ、コメントがありません