【Unity】Sceneをまたいだ値の受け渡し方
初めに
Scene間での値の受け渡しに関してはまだ様々なところでこっちの方がいい、あっちの方がいいなど議論されています、ですのでどれが正解なのかは各個人によって決まります。
今回はいくつかの方法をお伝えできればと思います。
目次
- DontDestroyOnLoad
- PlayerPrefs
- 静的クラスまたは静的変数
DontDestroyOnLoad
UnityにはDontDestroyOnLoadという関数があります、この関数はObjectをSceneをまたいでも引き継がれるObjectにするための関数です。
このDontDestroyOnLoadなObjectに値を渡すことで次のSceneでも値を引き継ぐことができます。
サンプルコード
//値を保存用
public int Score { set; get;}
void Start()
{
//↓これを呼び出せばDontDestroyObjectにできます
DontDestroyOnLoad(gameObject);
}
実行結果
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();
}
実行結果
静的クラスまたは静的変数
静的クラスなどはゲーム開始時に最初にメモリ領域を確保してゲーム終了までそのメモリ領域を解放しませんので値が常に保持されているということができます。
サンプルコード
値保存用クラス
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();
}
実行結果
まとめ
実行結果が少しわかりずらいのでなくてもよかったかな?って感じる…
ぶっちゃけScene間の値のやり取りって難しいですよね、今回記事にした内容以外にもいくつかやり方ありますし、そもそもScene遷移しないという選択肢もあるわけで…
とりあえず色々試して自分に一番合うものをお探しください!
Author And Source
この問題について(【Unity】Sceneをまたいだ値の受け渡し方), 我々は、より多くの情報をここで見つけました https://qiita.com/tilyakuda/items/fa226019d0d2e9064548著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .