1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】Sceneをまたいだ値の受け渡し方

Last updated at Posted at 2020-07-02

初めに

Scene間での値の受け渡しに関してはまだ様々なところでこっちの方がいい、あっちの方がいいなど議論されています、ですのでどれが正解なのかは各個人によって決まります。
今回はいくつかの方法をお伝えできればと思います。

目次

  • DontDestroyOnLoad
  • PlayerPrefs
  • 静的クラスまたは静的変数

DontDestroyOnLoad

UnityにはDontDestroyOnLoadという関数があります、この関数はObjectをSceneをまたいでも引き継がれるObjectにするための関数です。
このDontDestroyOnLoadなObjectに値を渡すことで次のSceneでも値を引き継ぐことができます。

サンプルコード

	//値を保存用
	public int Score { set; get;}

    void Start()
    {
    //↓これを呼び出せばDontDestroyObjectにできます
	DontDestroyOnLoad(gameObject);
    }

実行結果

FadeOut.gif

PlayerPrefs

PlayerPrefsに関しては過去にまとめた記事がありますのでこちらを参照してください。

サンプルコード

値を保存

    void Update()
    {
		if (Input.GetKeyDown(KeyCode.A))
		{
			PlayerPrefs.SetInt("Score",int.Parse(GetComponent<InputField>().text));
			SceneManager.LoadScene("2");
		}
    }

値を呼び出す

    void Start()
    {
		GetComponent<Text>().text = PlayerPrefs.GetInt("Score").ToString();
    }

実行結果

PlayerPrefs.gif

静的クラスまたは静的変数

静的クラスなどはゲーム開始時に最初にメモリ領域を確保してゲーム終了までそのメモリ領域を解放しませんので値が常に保持されているということができます。

サンプルコード

値保存用クラス

public static class Test
{
	public static int Score { set; get;}
}

値を入れる

    void Update()
    {
		if (Input.GetKeyDown(KeyCode.A))
		{
			Test.Score=int.Parse(GetComponent<InputField>().text);
			SceneManager.LoadScene("2");
		}
    }

値を呼び出す

    void Start()
    {
		GetComponent<Text>().text = Test.Score.ToString();
	}

実行結果

static.gif

まとめ

実行結果が少しわかりずらいのでなくてもよかったかな?って感じる…
ぶっちゃけScene間の値のやり取りって難しいですよね、今回記事にした内容以外にもいくつかやり方ありますし、そもそもScene遷移しないという選択肢もあるわけで…
とりあえず色々試して自分に一番合うものをお探しください!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?