質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1381閲覧

ブロックを一つずつ生成したい

Rpt297

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/05/25 01:28

編集2020/05/25 07:33

落ちものパズルで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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ku__ra__ge

2020/05/25 05:39

「ランダムな値が入っている配列の先頭から順番に値を取り出しInstantiateで1つずつ生成する」ことはInstance_Minoメソッドのfor文で実現できていると思います。 あなたがどのようなタイミングでどのような動作を実現したいのかを正確に質問しないと、回答はできません。
Rpt297

2020/05/25 07:35

私の説明が不十分となりましたこと、申し訳ございませんでした。 再度目を通していただければ幸いです
YAmaGNZ

2020/05/25 07:40

Instance_Minoを呼んだ時に1つだけ作成したいということですか? それならループせずにCountを添え字とするようにすればいいのでは?
Rpt297

2020/05/25 07:49

ループ処理にこだわり過ぎて盲点でした。これなら自分の力で解決できそうです
YAmaGNZ

2020/05/25 08:03

ぱっと見、現状でもCount=0の時にmino_Blockをランダムに並び替えしているし、Countのインクリメントを行い、Count=7で0に戻しているし、普通にCountを使う前提の処理になっているように思えます。 Countが0の時にoを使う前にインクリメントしているので、それをどうするかじゃないですかね?
Rpt297

2020/05/25 08:27

解決前はcountは配列の中身をリセットするためだけに作っていて、mino_block[]の指標0~6は別に作らないといけないと考えたため奇妙なことをしていました。次回からはこのようなことがないよう確認の時間を増やして質問するようにいたします。
guest

回答1

0

自己解決

YMnaGNZさんのおかげで自己解決することができました。
確認不足でお手間を取らせてしまい申し訳ございませんでした。

投稿2020/05/25 08:01

Rpt297

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問