ボタンを押して、重複なしでランダムにシーンを切り替えたい。

実現したいこと

unity、VisualStudioでクイズゲームを作っています。

シーンは全部で、"StartScene"、"Q1"、"Q2"、"Q3"、"GoalScene"の5つ。00StartSceneにはStartButtonがある。Q1、Q2、Q3、にはSceneChangeButtonがある。
StartButtonを押したら、ランダムでQ1、Q2、Q3のうちどれかを表示させる。続いてSceneChangeButtonを押すと、さらに前回表示されたシーンを1つ除いたQ1、Q2、Q3のうち2つのシーンからランダムでどちらかを表示させる。さらに続いて、SceneChangeButtonを押すと、前回までに表示されたシーンを2つ除いたQ1、Q2、Q3のうち残り1つのシーンを表示させる。最後にまたSceneChangeButtonを押すと、Q1、Q2、Q3のうち1度も表示されてないシーンはないので、00GoalSceneへと遷移する。

上記のようなプログラムを作りたいのですが、可能なのでしょうか、

発生している問題・分からないこと

ランダムでシーンを切り替えることはできたのですが、重複なしにするのと、ゴールシーンに移るのが出来なかったです。

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using UnityEngine.SocialPlatforms.Impl; public class SceneScript : MonoBehaviour { public GameObject[] squares; // Square オブジェクトの配列 private List<string> scenes = new List<string> { "Q1", "Q2", "Q3" }; // シーンのリスト private List<string> availableScenes; // 使用可能なシーンのリスト int[] a = new int[100]; // Start is called before the first frame update void Start() { availableScenes = new List<string>(scenes); // 使用可能なシーンのリストを初期化 a= new int[availableScenes.Count]; for (int i = 0; i < a.Length; i++) { a[i]=0; } } // Update is called once per frame void Update() { } public void StartButton() { if (availableScenes.Count == 0) { SceneManager.LoadScene("00GoalScene"); // すべてのシーンが選択されたら GoalScene に移動 //return; } else { string sceneToLoad = ""; int randomIndex = 0; int iFlag = 1; while (iFlag==1) { randomIndex = Random.Range(0, availableScenes.Count); // 使用可能なシーンのリストからランダムに選択 if (a[randomIndex]==0) { sceneToLoad = availableScenes[randomIndex]; // 選択されたシーンの名前を取得 a[randomIndex]=1; iFlag = 0; } } SceneManager.LoadScene(sceneToLoad); // シーンをロード availableScenes.RemoveAt(randomIndex); // 使用したシーンをリストから削除 } } public void SceneChangeButton() { if (availableScenes.Count == 0) { SceneManager.LoadScene("00GoalScene"); // すべてのシーンが選択されたら GoalScene に移動 //return; } else { string sceneToLoad = ""; int randomIndex = 0; int iFlag = 1; while (iFlag==1) { randomIndex = Random.Range(0, availableScenes.Count); // 使用可能なシーンのリストからランダムに選択 if (a[randomIndex]==0) { sceneToLoad = availableScenes[randomIndex]; // 選択されたシーンの名前を取得 a[randomIndex]=1; iFlag = 0; } } SceneManager.LoadScene(sceneToLoad); // シーンをロード availableScenes.RemoveAt(randomIndex); // 使用したシーンをリストから削除 } } }

試したこと・調べたこと

上記の詳細・結果

同様のプログラムは見つかりませんでした。

補足

特になし

コメントを投稿

0 コメント