シーンを遷移する方法

2020年12月10日

この記事では、Unityでシーンを遷移する方法について説明します。

SceneManagerクラス

UnityEngine.SceneManagement.SceneManagerクラスをクラスの関数を使用することで、シーンを遷移できます。遷移に使用する関数はすべて「静的メンバ関数」であるため、インスタンスの生成は必要ありません。

シーンの遷移に使用できる関数

シーンを遷移するには、下記の関数を利用できます。

LoadScene

シーンを遷移します( 読み込みます )。

宣言

public static void LoadScene( string sceneName, SceneManagement.LoadSceneMode mode = LoadSceneMode.Single );
public static void LoadScene( int sceneBuildIndex, SceneManagement.LoadSceneMode mode = LoadSceneMode.Single );

引数

sceneName読み込むシーンの名前、またはシーンファイルまでのパスです。
※ ここで指定するシーンは、Build Settingsの「Scenes In Build」に設定されている必要があります。
sceneBuildIndex読み込むシーンのインデックスです。
※ これは「Scenes In Build」で表示されている数になります。
mode読み込みの形式です。
※ シーンを遷移させたい場合、LoadSceneMode.single( デフォルト引数 )を指定します。

SceneManager.LoadScene( "NextScene" );
SceneManager.LoadScene( "Assets/Scenes/NextScene.unity" );

var index = 2;
SceneManager.LoadScene( index );

LoadSceneAsync

シーンの読み込みが完了してから、シーンを遷移します( 非同期処理 )。

宣言

public static AsyncOperation LoadSceneAsync( string sceneName, SceneManagement.LoadSceneMode mode= LoadSceneMode.Single );
public static AsyncOperation LoadSceneAsync( int sceneBuildIndex, SceneManagement.LoadSceneMode mode= LoadSceneMode.Single );

引数

sceneName読み込むシーンの名前、またはシーンファイルまでのパスです。
sceneBuildIndex読み込むシーンのインデックスです。
mode読み込みの形式です。

戻り値

AsyncOperation非同期処理を操作するためのオブジェクトです。

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

public class Example : MonoBehaviour
{
    void Start()
    {
        StartCoroutine( ChangeScene() );
    }

    IEnumerator ChangeScene() 
    {
        var operation = SceneManager.LoadSceneAsync( "NextScene" );
        operation.completed += ( self ) => Debug.Log( "Loaded." );

        while ( !operation.isDone )
        { 
            yield return null;
            Debug.Log( "Now Loading." );
        }
    }
}

参考ページ