
前提
Unityで C#を使ってテトリスを作成中です。
基盤となるボードについてのスクリプトを書いています。
実現したいこと
・エラーを解決する
発生している問題・エラーメッセージ
CS0270: Array size cannot be specified in a variable declaration (try initializing with a 'new' expression) 配列サイズは変数宣言で指定できません ('new' 式で初期化してみてください)
該当のソースコード
C#
1public class Board : MonoBehaviour 2{ 3 4 private Transform[x,y] grid; 5 6 7 8 [SerializeField] 9 private Transform emptySprite; 10 11 [SerializeField] 12 private int height = 30,width = 10,header = 8; 13 14 private void Awake() 15 { 16 grid = new Transform[width,height]; 17 } 18 19 private void Start() 20 { 21 CreateBoard(); 22 } 23 24 25 void CreateBoard() 26 { 27 if (emptySprite) 28 { 29 for(int y = 0; y < height - header; y++) 30 { 31 for(int x = 0; x < width; x++) 32 { 33 Transform clone = Instantiate(emptySprite, 34 new Vector3(x, y, 0), Quaternion.identity); 35 36 clone.transform.parent = transform; 37 } 38 } 39 } 40 } 41 42 public bool CheckPosition(Block block) 43 { 44 foreach (Transform item in block.transform) 45 { 46 Vector2 pos = Rounding.Round(item.position); 47 48 if(!BoardOutCheck((int)pos.x,(int)pos.y)) 49 { 50 return false; 51 } 52 53 54 if(BlockCheck((int)pos.x, (int)pos.y,block)) 55 { 56 return false; 57 } 58 } 59 60 return true; 61 } 62 63 64 bool BoardOutCheck(int x, int y) 65 { 66 return (x >= 0 && x < width && y >= 0); 67 } 68 69 70 bool BlockCheck(int x , int y,Block block) 71 { 72 return(grid[x,y] != null && grid[x,y].parent !=block.transform); 73 } 74 75 76 public void SaveBlockInGrid(Block block) 77 { 78 foreach(Transform item in block.transform) 79 { 80 Vector2 pos = Rounding.Round(item.position); 81 82 grid[(int)pos.x, (int)pos.y] = item; 83 } 84 } 85 86 87 public void ClearAllRows() 88 { 89 for (int y = 0; y < height; y++) 90 { 91 if(IsComplete(y)) 92 { 93 ClearRow(y); 94 95 ShiftRowsDown(y + 1); 96 97 y--; 98 } 99 } 100 } 101 102 103 bool IsComplete(int y) 104 { 105 for (int x = 0; x < width; x++) 106 { 107 if(grid[x,y] == null) 108 { 109 return false; 110 } 111 } 112 113 return true; 114 } 115 116 void ClearRow() 117 { 118 for (int x = 0; x < width; x++) 119 { 120 if(grid[x,y] != null) 121 { 122 Destroy(grid[x,y].gameObject); 123 } 124 grid[x,y] = null; 125 } 126 127 128 129 void ShiftRowsDown(int startY) 130 { 131 for (int y = startY; y< height; y++) 132 { 133 for (int y= 0; x<width; x++) 134 { 135 if(grid[x,y] !=null) 136 { 137 grid[x,y - 1] = grid[x,y]; 138 grid[x,y] = null; 139 grid[x,y-1].position += new Vector3(0,-1,0); 140 } 141 } 142 } 143 } 144 } 145} 146 147 148どのコードが必要か分かりませんでしたので 149すべて記載させてもらいました。 150 151今回のエラーは一番上の方にある 152private Transform[x,y] grid; です。 153
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

C# の基本的な文法を勉強しましょう。この先も、基本的な知識があれば聞かなくてすむことを、いちいち聞いて解決するつもりですか?
学習しながら作品を作っていて、わからないことを質問して文句を言われても。
回答があり、アドバイスならありがたいですが、ただただ自分の言いたいことだけ言われても
文句にすぎず解決につながりません。わかっているなら教えていただけませんか?嫌なのであればコメントしないでください。もう一度言いますが、学習途中での質問です。

ここはあなた専用の Q&A サイトではないのです。https://teratail.com/help/avoid-asking に書いてあるように「価値のあるコンテンツを世の中に残し届けることを目的」としているそうです。ごく基本的な知識があるか、でなくてもエラーメッセージを参考に少し調べればすぐわかることを聞いているあなたの質問が価値あるか考えてみてはいかが?
これも読んでください。 https://teratail.com/help/question-tips
エラーメッセージを参考に調べた上でわからないから質問しているのです。
実際に私がわからなかったのですから、これからも基礎がわからない学習者は出てくるはずです。
そんなことよりも、プログラミングに関する質疑応答の場での
この会話の方が価値が低く、世の中に残すべきコンテンツですか?
わかっているなら教えてください。嫌なのであればコメントしてこないでくださいと前述しました。
基礎がわかるかどうかを判断するのは、学習者です。
基礎だからわかる。基礎だから質問してはだめ。そのようなルールはないのです。
私は議論に興味がありません。エラーを解決したいだけなので、
教えていただくことができないのなら、コメントしてこないでください。

> エラーメッセージを参考に調べた上でわからないから質問しているのです。
調べてるとは思えませんよ。エラーメッセージにある CS0270 でググると一番最初に出てくる Microsoft のドキュメントに詳しく書いてあるけど読みましたか?
その前にも問題があって、未定義の変数は使えないというのは C# でアプリを作ってるなら知らない方がおかしいですよ。
マイクロソフトのドキュメントの int とか newのやつをやってみましたが
違うエラーが次々に発生し、解決できてませんでしたので
質問をしているのです。もう一度言います。回答しないならコメントしてこないでください。不毛な時間でしかない。
参考にされているページがあるはずです。
そこに今回エラーとなる文が書いてあるのであれば、そこは参考にしないほうがいいかと思います。
なるほど、ありがとうございます。
参考にした記事がよくなかったです。
ありがとうございます。
何故エラーになるかというとエラーメッセージに書いてある通りで
宣言時のサイズ指定に変数は使用できません。
なので「private Transform[x,y] grid;」の何が問題になっているのかは分かるはずです。
で、貴方がこの文で何をしたいのかを理解しているのかが問題になります。
ここで何をしたいのかは説明できますか?

> 回答しないならコメントしてこないでください。不毛な時間でしかない。
Teratail は「価値のあるコンテンツを世の中に残し届けることを目的」ということなので、それにそぐわない質問は不毛だと言っておるのです。
↓ 読んでみよう。
教えてクン養成マニュアル
http://www.redout.net/data/osietekun.html
他の方の回答がわかりやすく解決しました!
とても嬉しいです!!
それにそぐわない質問などはなく
プログラミングエラーに関係している話であれば、
誰かが、同じ悩みを持つ可能性がありコンテンツとして残すに値すると言っており、
尚且つ、あなたのしている、”初学者”への高圧的態度で意欲を剝ぐ一方的な会話は
不毛だと言っておるのです。
プログラミングができるから話の通ずる優秀な方ではないことが学べて
良い機会でした。

前の質問 https://teratail.com/questions/ca37a5ohqibjj0 も同じ。基本的な知識があれば解決できるはず。前の質問が解決できても、基本的な知識がないからすぐ別の問題に当たってまた聞いてくる。今後も次から次へとそういうことを繰り返すつもりですか? そういう質問は「同じ悩みを持つ可能性がありコンテンツとして残すに値する」ということはないのですよ。みんな知っているはずの価値の低いスレッドに、ホントに価値あるスレッドが埋もれてしまうから。

回答1件
あなたの回答
tips
プレビュー