すみませんが質問させてください。
現在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; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。