みなさん、こんにちは。見ていただきありがとうございます。
シリーズ「ARサイコロをつくろう!」Part.3です。
今回は、Unityの画面遷移と変数の保持について開発をしていきます。
ARサイコロのきっかけなどは、「ARサイコロをつくろう! AR Dice まとめ」に詳しく書いてありますので見てください。
Unityのシーンについて
AR Diceのシーン概要
unityでは、各画面を「Scene」という名前で分けています。タイトル画面や実際のゲーム画面などを切り替えて遊びます。AR Diceでは、下の図のような設計としました。
本当は、AR画面と設定画面を一緒にしたかったのですが、AR処理と同時に設定でのプログラムがこれから多くなっていくと処理負荷が大きくなるかもしれないと思ったからです。
シーンの移動について
実際のコードは下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class titlestart : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } public void OnClick(){ //シーン移動用のメソッド SceneManager.LoadScene("シーン名前"); } } |
シーン移動には、SceneManager.LoadScene(“シーン名前”)を使います。
Unityの前のバージョンでは使えた関数が使えずにこの関数が推奨となっています。
タイトル画面(スタートボタンで設定画面にいきます)
設定画面(緑の再生ボタンでAR Diceの画面にいきます)
AR Dice画面(黄色のボタンを押すと設定画面にいきます)
シーン間の変数を保持する
Unityのシーンの移動では、GameObjectなどが消えるため基本的に値が保持されずに移動します。しかし、いくつかの方法で変数などの値を保持してシーン移動を行うことができます。
- クラスのstatic変数に保持しておく
- シングルトンパターンを利用する
- DontDestoryOnLoad関数を利用する
- ストレージに値を保存
今回は、クラスのstatic変数に値を保持して関数で引き出せるようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class titlestart : MonoBehaviour { //静的変数 クラスのすべてのインスタンスに共有される public static int[] surface_state = new int[6]; // Use this for initialization void Start () { for(int i = 0; i<surface_state.Length; ++i){ surface_state[i] = 0; } } // Update is called once per frame void Update () { } public void OnClick(){ //シーン移動用のメソッド SceneManager.LoadScene("シーン名前"); } public static int[] getSurfaceState(){ return surface_state; } } |
これで、いろんなシーンの中でAR Diceのどの面を当たりにするのかを設定画面以外でも読み取ることができるようになりました。
まとめ
最後まで見ていただきありがとうございます。
実際の開発は進んでいるのですが、記事にまとめる作業ともうひとつのブログ更新のためあまり時間が取れていない状態です。
アプリのプロトタイプが完成できましたら、記事の更新速度も早くなる(かも!?)と思います。
次回は、設定画面でドロップダウンの使い方について書いていきます。