最初のシーンでランダムな数を取得し、次々とシーンをランダムに切り替える実装を行なっています。
実際のゲームシーンでは、問題を正解するごとに次々とランダムに問題を出すということをしようとしています。
最初のシーンでランダムな数を取得し、次のシーンで、問題を正解した時に、最初のシーンで扱っている関数を使用するということがしたいのですが、
やっていることはタイトルシーンについているRandomSceneというスクリプトの関数に、問題のシーンについているNiというスクリプトが参照?するということです。
しかし、問題を解答したら
ArgumentOutOfRangeException: Argument is out of range. Parameter name: index
というエラーが出て、シーンを遷移することができません。
調べたところ、このエラーはlistに要素が入っていない時などに出るということがわかりました。
しかし、RandomSceneで乱数を取得してDontDestroyOnLoadとしているので、取得した乱数は消えないと思うのです。何か別の問題があるように思えるのですが、わかりません。書き換える方法などご教授願います。
public class RandomScene : MonoBehaviour { List<int> numbers = new List<int>(); public GameObject gameobject; Count count; void Start() { DontDestroyOnLoad(this); for (int i = 0; i < EditorBuildSettings.scenes.Length; i++) { numbers.Add(i); } numbers.RemoveAt(1); numbers.RemoveAt(2); numbers.RemoveAt(SceneManager.GetActiveScene().buildIndex); count = gameobject.GetComponent<Count>(); } public void Update() { float three = count.totalTime; if (three <= 1) { StartCoroutine("LoadLoop"); } } IEnumerator LoadLoop() { while (numbers.Count > 0) { RandomSceneChange(); } yield return new WaitForSeconds(0.5f); } public void RandomSceneChange() { int ransu = numbers[Random.Range(0, numbers.Count)]; numbers.Remove(ransu); SceneManager.LoadScene(ransu); } }
というスクリプトのRandomSceneChange()という関数を、問題のシーンで使用したいです。↓以下のスクリプトで参照しようとしています。
public class Ni : MonoBehaviour { // 初期化 GameObject refObj; void Start() { manager = FindObjectOfType<Manager>(); for (int i = 0; i < EditorBuildSettings.scenes.Length; i++) { numbers.Add(i); } numbers.RemoveAt(1); numbers.RemoveAt(2); numbers.RemoveAt(SceneManager.GetActiveScene().buildIndex); refObj = GameObject.Find("R"); } public void RandomSceneChangeNi() { public void Correct(GameObject Seikai) { Debug.Log("正解!"); Maru.SetActive(true); //1.0秒後に呼び出す Invoke("RandomSceneChangeNi", 1.0f); } Ichi = false; // 別のオブジェクトのスクリプトを参照する RandomScene r2 = refObj.GetComponent<RandomScene>(); r2.RandomSceneChange(); } }
他にも問題を解答するためのプログラムが複雑に書き込まれていますので、関係している一部分を書きぬきましたが、余計なものが入っていて見づらいです。申し訳ないです。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー