【unity 入門】変数を保持したままSceneを切り替える方法
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変数を使えば簡単に変数を保持することができるので、ぜひ使ってみてください!