【Unity】SceneManager.LoadSceneで次のステージへシーンを切り替える
2018年03月28日

【Unity】SceneManager.LoadSceneで次のステージへシーンを切り替える

UFOキャッチャーのゲーム内で使う賞品に良さそうな3Dモデルをアセットストアで買うと結構高いので自作しようと思っているのですが、いくつか作って行き詰まってます(´・ω・`)

それは置いといて、Unityで現在のステージをクリアしたら次のステージに移るにはどうするかメモしておこうと思います。

SceneManager.LoadSceneでシーンを切り替える

シーンを切り替えるにはSceneManager.LoadSceneを使う訳ですが、これをC#で使うにはまずスクリプトの上部に「using UnityEngine.SceneManagement;」と書く必要があります。

C#のスクリプトを作成し、下記のようにします。スクリプト名はChangeSceneScriptという名前にしました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; //←書き加える

public class ChangeSceneScript : MonoBehaviour {

	void Start () {
		
	}
	
	void Update () {
		
	}
}

それと使用するシーンをBuild SettingsのScenes In Buildに加えておきます。

プロジェクトビューからシーンをドラッグ&ドロップすればScenes In Buildに登録できます。今回はTest1と書かれたシーン(名前はtest1)とTest2と書かれたシーン(名前はtest2)を使います。test1にはシーン切り替えの為のボタンも設置しています。

シーン名を代入

呼び出すシーンの名前が分かっているのであればSceneManager.LoadSceneの引数に名前を代入します。

今回はボタンをクリックしたらtest1からtest2にシーンが切り替わるようにしてみます。

public void changeScene()
{
    //現在のシーンの名前を取得
    string sceneName = SceneManager.GetActiveScene().name;

    if (sceneName == "test1")
    {
        SceneManager.LoadScene("test2");
    }
}

今回はtest1からtest2に切り替えるだけなので現在のシーン名を取得したりif文を使う必要もないのですが、このコードに「else if」を使えばステージ1をクリアしたらステージ2、ステージ2をクリアしたらステージ3へ切り替えるといったことも出来ます。シーンが多い場合はif文よりswitch文にした方がコードが見やすいし動作も速いらしいので良いと思います。

ボタンの設定

スクリプトを適当なオブジェクトにアタッチします。今回はChangeSceneControllerという名前を付けた空のオブジェクトにアタッチしました。ボタン自身にアタッチしても問題ありません。

ヒエラルキーからButtonを選択し、インスペクターのButton(Script)にあるOn Click()の右下の+をクリックします。

None(Object)と書かれた所に先ほどスクリプトをアタッチしたオブジェクトをドラッグ&ドロップします。

続いてNo Functionと書かれたところをクリックします。するとChangeSceneControllerにアタッチしたスクリプトの名前があるのでそこにカーソルを持っていき、さらに表示された関数の中からchangeSceneを選びます。

結果

実際に動かしてみた結果です。

上手くシーンが切り替わっていますね!

インデックスの番号を代入

シーン名を使う以外に、Scenes In Buildへ登録されているインデックス番号を利用してシーンを切り替えることも出来ます。

これは登録順を間違えると思わぬシーンに飛んでしまうので注意が必要です。

先ほどのスクリプトを下記のように変更します。

public void changeScene()
{
    //現在のシーンのインデックス番号を取得
    int nowSceneIndexNumber = SceneManager.GetActiveScene().buildIndex;

    SceneManager.LoadScene(++nowSceneIndexNumber);
}

現在のシーンのインデックス番号に1を足すことで次のシーンへ飛ぶことが出来ます。単純に次のステージに進んでいくだけならif文を使わずに済むので便利そうですね。それにシーンの名前を後から変更した場合にスクリプトを書き換える必要もありませんね。

こちらも先ほどと同じように動作するので結果は省きます。

スポンサーリンク

タグ:C# UNITY
posted by ナオ at 19:41 | Comment(0) | Unityの使い方メモ
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]