【Unity】シーンの切り替え方法。タイトルやゴール画面の遷移に使えます。

2021年8月12日

どうも、だらはです。
今回はシーンの切り替え方法について紹介したいと思います。
スクリプトでは以下のメソッドを使います。

  • Application.LoadLevel()メソッド

スポンサーリンク

シーンの切り替え方法

シーンの切り替え手順は以下の通りです。

◆シーンの切り替え手順

  1. 切り替える2つのシーンを準備する。
  2. Build Settingsに2つのシーンを追加する。
  3. シーン切り替え用のスクリプトを作成する。

以上です。
では、順番に見ていきます。

①切り替える2つのシーンを準備する。

「File -> New Scene」から切り替える2つのシーンを作成します。
今回は、以下のシーンを作成します。

  • 切り替え前のシーン名:「Title」
  • 切り替え後のシーン名:「SampleScene」

②Build Settingsに2つのシーンを追加する。

「File -> Build Settings -> Scenes in Build」に2つのシーンを追加します。
Projectウィンドウから、ドラッグ&ドロップで追加します。

③シーン切り替え用のスクリプトを作成する。

最後に、シーン切り替え用のスクリプトを作成します。
空のGameObjectに以下のスクリプトをアタッチしてみてください。

◆Startbutton.cs

using UnityEngine;

public class Startbutton : MonoBehaviour
{
    [SerializeField]
    private string SampleScene;

    private string text = "ボタンを押してね。Scpaceキーでも良いです";
    private void OnGUI()
    {
        Rect rect = new Rect(10, 10, 400, 30);
        GUI.Label(rect, text);

        rect.y = 40;
        rect.height = 50;
        if (GUI.Button(rect, "Push Start")
            ||(Input.GetKey(KeyCode.Space)))
        {
            Application.LoadLevel(SampleScene);
        }
    }
}

ゲームを実行すると、以下のゲームビューになります。
左上にボタンが表示されるため、それを押下するとゲームシーンが切り替わります。

スクリプトについて解説

シーン切り替えにはApplicationクラスを用います。
メソッドはLoadLevel()メソッドを使います。

public static void LoadLevel(int index);
public static void LoadLevel(string name);

indexは「File -> Build Settings -> Scenes in Build」に追加したシーン順を0ベースの数字で指定できます。
stringはシーン名の文字列で指定できます。
また、以下のメソッドを使うと、上記indexとシーン名を取得できます。

public static int loadedLevel{ get; }
public static string loadedLevelName{ get; }

以上、だらはでした。

追記(2021.8.12)

Unity5.3からApplication.LoadLevelが非推奨になったとのことです。
代わりに、SceneManager.LoadScene()メソッドを使うと良いとのことです。

◆修正後StartButton.cs

using UnityEngine;
using UnityEngine.SceneManagement;

public class StartButton : MonoBehaviour
{
    [SerializeField]
    private string SampleScene;

    private string text = "ボタンを押してね。Scpaceキーでも良いです";
    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 10, 400, 30);
        GUI.Label(rect1, text);

        rect1.y = 40;
        rect1.height = 50;
        if (GUI.Button(rect1, "Push Start")
            || (Input.GetKey(KeyCode.Space)))
        {
            //Application.LoadLevel(SampleScene);
            SceneManager.LoadScene(SampleScene);
        }
    }
}

スポンサーリンク

基礎

Posted by daraha_gm