Meiryo’s blog

やってみて詰まったことを備忘録として残すブログ

【Unity】シーン遷移の自動化

シーンを追加するたびに
LoadScene("シーン名")を書くのが
めんどくさかったので
シーンを追加しても
手を入れずに済むようにしてみました。

自動化スクリプト

using System;
using UnityEngine;
using UnityEngine.SceneManagement;

class SceneTransitioner : MonoBehaviour
{
    private readonly int TitleSceneIndex = 0;
    private int SceneCount { get; set; }
    
    private void Start()
    {
        SceneCount = SceneManager.sceneCountInBuildSettings;
    }

    public void LoadScene()
    {
        var nowSceneIndex = SceneManager.GetActiveScene().buildIndex;

        //最後のシーンだったら最初に戻る
        if (nowSceneIndex + 1 == SceneCount)
        {
            SceneManager.LoadScene(TitleSceneIndex);
        }
        //それ以外は次のシーンへ
        else
        {
            SceneManager.LoadScene(nowSceneIndex + 1);
        }
    }
}

これでこのクラスのLoadSceneを呼び出せば
次のシーンを呼び出すことができます。

Startメソッドでやってること

sceneCountInBuildSettings
ビルドに設定されているシーンの数を取得します。
f:id:meimaru:20210518085327p:plain
この場合だと5を取得します。

LoadSceneメソッドでやっていること

初めに現在のシーンのbuildIndexを取得しています。
buildIndexは先程の画像の右側の連番です。

連番となっているので現在のbuildIndexに
1を足せば次のシーンを指すことができます。

この数値をSceneManager.LoadSceneの
引数に渡すことによって
次のシーンに行くようにしています。

実行結果

Buttonを押すと今回作ったスクリプト
LoadSceneが呼び出されます。
f:id:meimaru:20210518090345p:plain

5つのシーンの遷移を実行してみます。

f:id:meimaru:20210518090535g:plain
最初のシーンから最後のシーンまで
遷移することができるようになりました。

これでシーンが追加されても
BuildSettingにシーンを追加するだけで
作業は終わりです。
LoadScene("新しいシーン名")をどこかに
書く作業が無くなったので
楽になりました。