【unity 入門】変数を保持したままSceneを切り替える方法

2019年2月1日

unityでSceneを切り替える時に変数を保持しておきたいことってありますよね。

Sceneを切り替えても変数を保持する方法としては主に、

static変数を使う

という方法があります。

この記事ではstatic変数を使って、変数を保持したままSceneを切り替える方法について詳しく解説します!

Sceneを用意する

空のオブジェクトにスクリプトをアタッチ

今回はSceneをまたいで変数Scoreを保持させましょう。

わかりやすくするためにTextにScoreの値を表示します。

そのためにScene1とScene2を作成していきましょう。

まずはScene1からです。

Scene1を作成したら空のオブジェクトを作って、スクリプトをアタッチしてください。

まずは、Hierarchy>Create>Create Emptyです。

そして作成した『GameObject』を選択した状態でAddComponentを押します。

Add Componentを押したら『New Script』を選択しましょう。

その後名前を『Game Manager』と変更し、『Create And Add』を押しましょう。

これで空のオブジェクトを作成し、スクリプトをアタッチすることができました。

Scene1を保存


Scene1として保存しましょう。

File>Save Scene as…と押していき、

名前を『Scene1』に変更したら『Save』ボタンを押しましょう。

これでScene1が作成できました。

Scene2の作成


Scene2はScene1を複製して作ります。

Scene1を選択した状態でControl + D(MacならCommand + D)を押すことで複製できます。

これでScene2が作成されました!

このままの状態では同じスクリプトが使われていますので、Scene2のスクリプトを削除して新しいスクリプトをアタッチしましょう。

まずはScene2に移動します。

Scene2をダブルクリックすることで移動できます。

Scene2に移動したら、GameObjectを選択した状態で歯車、Remove Componentの順に押してスクリプトを削除しましょう。

削除したら新しいスクリプトをアタッチします。

先ほどと同じようにAdd Component > New Scriptを押していき、

名前を『GameManager2』に変更したら、Create and Addを押しましょう。

これで新しいスクリプトが作成されました。

それでは、

static変数を使ってSceneを切り替えても変数を保持する方法についてみていきましょう!

static変数を使ってSceneを切り替えても変数を保持する方法

Scene1のコード

staticを使った方法は、読み込まれるクラスで

public static 型(intやstring) 変数名;

といったように変数を作り、読み込むクラスで

クラス名.変数名

で呼び出して使います。

これではよくわからないと思うので、実際にやっていきましょう!

まずScene1のスクリプトである『GameManager』を編集していきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour {

    //追加
    public static int score1 = 100;

	// Use this for initialization
	void Start () {

	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

今回追加した部分は、

public static int score1 = 100;

int型のScore1の初期値に100を入れて変数を作りました。

public staticがついているので、他のクラスからも呼び出すことができます

Scene2のコード

Scene2に切り替えて『GameManager2』にコードを記述していきます。

記述内容は、

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager2 : MonoBehaviour {
    

	// Use this for initialization
	void Start () {
        //追加
        Debug.Log(GameManager.score1);
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

今回追加した部分は、

Debug.Log(GameManager.score1);

これはGameManagerクラスに記述されたscore1という変数をログ出力しています。

変数score1には100が入っていましたね。

ですので、ログには100という数字が出力されるはずです。

実際にそうなっているのか実行して確かめてみましょう。

実行結果は、

無事に100が出力されていますね!

このように、static変数を使うことでSceneを切り替えても変数を保持しておくことができます。

まとめ

この記事ではstatic変数を使って、変数を保持したままSceneを切り替える方法について扱ってきました。

static変数を使えば簡単に変数を保持することができるので、ぜひ使ってみてください!