落ちものパズルで7種類のブロックを生成するというプログラムを書いています。
ランダムな値が入っている配列の先頭から順番に値を取り出しInstantiateで1つずつ生成するというところで行き詰っています。他の皆さんがどのように解決しているか調べてもlist(動的配列?)やLinqを使っている人が多く参考にできませんでした。listやLinqを使わずに実現したいのですが、お力添えいただければ幸いです。
追記:ゲーム実行時とミノが底に着いたとき(別のスクリプトで読んでます)にInstance_Mino()が呼ばれるのですが、以下のプログラムだとInstance_Mino()を一度呼ぶだけで7つのミノが同時にインスタンスされてしまいます。
原因はfor文でi=6までループしInstantiateが7回実行されるため一度に画面に7つのミノが生成されるからなのですがmino_Block[i]のiをカウントアップさせないと同じミノが呼び出されるので、for文を使ってiをカウントアップさせながら、画面にひとつずつインスタンスさせたいです。つたない文章で申し訳ございません。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Mino_Instance : MonoBehaviour 6{ 7 public GameObject[] mino_Block; 8 int[] random_Num = { 0, 1, 2, 3, 4, 5, 6 }; 9 int count = 0; 10 11 void Start() 12 { 13 Instance_Mino(); 14 } 15 16 public void Instance_Mino() //ミノがそこに着いたら別のスクリプトで呼ばれる 17 { 18 if (count == 0) 19 { 20 Random_Num(); //mino_blockにランダムな値を作成する 21 count++; 22 } 23 else 24 { 25 count++; 26 if (count == 7) //一周したときcountの値をリセットする 27 { 28 count = 0; 29 } 30 } 31 32 for (int i = 0; i < mino_Block.Length; i++) //一度だけinstanceしたい 33 { 34 Instantiate(mino_Block[i], transform.position, Quaternion.identity); //ランダム生成 35 //for文でi=6までループするから一度に7つのミノが生成されるし、なぜか2度目で倍の数が生成される 36 37 } 38 39 } 40 41 private GameObject[] Random_Num() 42 { 43 int length = mino_Block.Length; 44 45 for (int i = 0; i < mino_Block.Length; i++) 46 { 47 GameObject evacuation_box = mino_Block[i]; //i番目の中身をevacuation_boxに避難 48 int randomIndex = Random.Range(i, length); //乱数を取得する 49 mino_Block[i] = mino_Block[randomIndex]; //乱数をmino_Block[i]に格納する 50 mino_Block[randomIndex] = evacuation_box; //避難してた値をrandomIndex番目に格納 51 } 52 return mino_Block; 53 } 54}
回答1件
あなたの回答
tips
プレビュー