前提・実現したいこと
UnityでC#を用いてゲームを作っています。初心者です。ゲームの流れとしては
- シーンAのScriptAで1~3までの整数をランダムに選ぶ。それを11回繰り返して "rarity"というList(int型)に順番に値を入れる。
- シーンBで、もし"rarity"の値が1ならSSRのオブジェクトを登場させる。2ならSR, 3ならRのオブジェクトを登場させる。
発生している問題・エラーメッセージ
最初、シーンBのスクリプトにて以下のように書きました。
なお、rarityというListはpublicでstaticです。
ScriptAはDontDestroyOnLoad()で、アタッチしたオブジェクトをシーンBに引き継いでいます。
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class scriptB : MonoBehaviour 6 7int index; //リストのインデックス 8 9void Start() 10{ 11 //11回繰り返す 12 for ( index = 0; index < 11; index++) 13 { 14 Invoke("AppearYabumi", index * 2f); //2秒ずつ登場を遅らせる 15 } 16} 17 18void AppearYabumi() 19 { 20 if( ScriptA.rarity[index] == 1) 21 { 22 //SSRオブジェクトをInstantiateして、座標を決める。 23 } 24 else if(ScriptA.rarity[index] == 2) 25 { 26 //SRオブジェクトをInstantiateして、座標を決める。 27 } 28 else 29 { 30 //RオブジェクトをInstantiateして、座標を決める。 31 } 32 }
しかし、
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
と表示されてしまいました。
---追記
・rarityというListには必ず1つ以上1か2の値をもつ要素があるから。(つまり3の値を持つ要素数<11)
・ScriptA.rarity[index]の値を正常に取得できていないせいで、ifの条件文が2つともスルーされ、else内の処理だけが行われている。
・for文で11回まわすと、以上の理由よりエラーが発生する。
→問題は「ScriptA.rarity[index]の値を正常に取得できていない」というところにある。
試したこと
その後、int型のarrayという配列(要素数11)を宣言し、Startのところに以下のように書き加えました。
c#
1void Start() 2 { 3 array[0] = ScriptA.rarity[0]; 4 array[1] = ScriptA.rarity[1]; 5 array[2] = ScriptA.rarity[2]; 6 array[3] = ScriptA.rarity[3]; 7 array[4] = ScriptA.rarity[4]; 8 array[5] = ScriptA.rarity[5]; 9 array[6] = ScriptA.rarity[6]; 10 array[7] = ScriptA.rarity[7]; 11 array[8] = ScriptA.rarity[8]; 12 array[9] = ScriptA.rarity[9]; 13 array[10] = ScriptA.rarity[10]; 14 15 //以下略
以下略のところには先ほどのものと同じコードが続きます。AppearYabumiメソッド内のScriptA.rarity[index] == 1
は
array[index] ==1
のように書き換えました。
しかし、また同じエラーコードが出現します。
ためしにStartメソッド内で
Debug.Log(ScriptA.rarity[0]);
とすると正しい値が出るのに、
Debug.Log(array[0]);
とすると0と表示されます。(rarityリストの要素は1, 2, 3のどれかになっていないとおかしい)
おそらく値をうまく引き継げていないのが原因だと思いますが、どうしてこれで引き継げないのかが分かりません。
追加すべき情報等あればご教示ください。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Unity 2019(最新版)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/05 12:29