Help us understand the problem. What is going on with this article?

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

初めに

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遷移しないという選択肢もあるわけで…
とりあえず色々試して自分に一番合うものをお探しください!

tilyakuda
UnityとC#を中心に勉強しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした