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

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

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

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

Unity

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

Q&A

解決済

1回答

2532閲覧

Unityでさめがめ系ゲームを作りたいのですがブロックが下まで降りません

sitappa1981

総合スコア66

C#

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

Unity

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

0グッド

0クリップ

投稿2017/03/30 15:49

すみませんが質問させてください。
現在Unityでさめがめ系ゲームの制作を練習で作っているところです。
そこでクリックした所のブロックを消して、上にブロックが残っている時にはブロックを降ろしてくる所の処理で躓いています。

実装したい内容としましては・・・
・カーソルをブロックに合わせると、カーソルを合わせたブロックと同じ色のブロックをまとめ選択される(今回は黒になっています)
・クリックすると黒になっているブロックをまとめて消す(実際には透明化しています)
・消えたブロックの上にブロックがある場合は、下に降ろす
という形で進行しているのですが、消えたブロックが縦に複数あった場合、完全に下まで折りきらずに止まってしまいます。

初期値がこのようになっていて、真ん中の方にあります赤にカーソルを合わせるとします
![イメージ説明

カーソルが合わさって赤色がまとめて選択状態(黒)になります、そこをクリックしますと
イメージ説明

左から4列目、下から3,4列目は空白のままですが、上からブロックが降りません。
イメージ説明

恐らくは「DownAction」の所でうまく処理できていないと思うのですが、何度書き換えてもうまく最後までブロックを降ろすことができません。
申し訳ありませんがどなたかご助力お願いできませんでしょうか?

実装したい内容
http://www.afsgames.com/samegame.htm

使用環境:Unity5.5.1、Visual Studio 2015

###該当のソースコード

//カードをクリックした時 public void ClickCheck() { for (int idy = 0; idy < 8; idy++) { for (int idx = 0; idx < 10; idx++) { //チェックフラグが立っている所を選択 if (checkTBL[idx, idy] == 1) { //チェックフラグを外す checkTBL[idx, idy] = 0; //オブジェクト生成の配列の方の該当の場所を0にする boxTBL[idx, idy] = 0; //オブジェクト名を登録する objname = "Card_x" + idx + "_y" + idy; //登録したオブジェクト名のオブジェクトを探す GameObject obj = GameObject.Find(objname); //クリックされたカードと、それに隣接している同じ色のカードの色を透明にする(オブジェクトを消したわけではない) obj.GetComponent<Renderer>().material.color = new Color(0.0f, 0.0f, 0.0f, 0.0f); } } } clickcheck = false; GameData.ClickCheck = false; downaction = true; } //クリックして消えたカードの上のカードを降ろしてくる public void DownAction() { //配列を逆から順番に検索を行う。(画面的には下から) for (int idy = 7; idy > 0; idy--) { for (int idx = 9; idx > -1; idx--) { //透明化されたカードの場所であれば if (boxTBL[idx,idy] == 0) { for (int i = idy; i > 0; i--) { //配列の上の列のカードを下にコピーする boxTBL[idx, i] = boxTBL[idx, i - 1]; } //配列の一番上のカードの配列番号を透明(0)にする boxTBL[idx, 0] = 0; } } } for (int idy = 0; idy < 8; idy++) { for (int idx = 0; idx < 10; idx++) { //オブジェクト名を登録する objname = "Card_x" + idx + "_y" + idy; //登録したオブジェクト名のオブジェクトを探す GameObject obj = GameObject.Find(objname); //色を設定する switch (boxTBL[idx, idy]) { case 0: obj.GetComponent<Renderer>().material.color = new Color(0.0f, 0.0f, 0.0f, 0.0f); //色を透明にする break; case 1: obj.GetComponent<Renderer>().material.color = Color.blue; //色を青に設定 break; case 2: obj.GetComponent<Renderer>().material.color = Color.green; //色を緑に設定 break; case 3: obj.GetComponent<Renderer>().material.color = Color.red; //色を緑に設定 break; case 4: obj.GetComponent<Renderer>().material.color = Color.yellow; //色を緑に設定 break; case 5: obj.GetComponent<Renderer>().material.color = Color.cyan; //色を緑に設定 break; } } } downaction = false; } }

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

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

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

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

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

guest

回答1

0

自己解決

すみません、自己解決しました。
DownActionの項目を複数回実行することで無事下まで降りました。

投稿2017/03/30 18:07

sitappa1981

総合スコア66

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問