k0dluvHQam45pQ3
@k0dluvHQam45pQ3

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

構造体の中の配列

構造体の中に配列を入れたい

パズルゲームのステージのデータをUnityに書く際に構造体と配列を使ったのですが、エラーが出てしまいました
解決方法を教えて下さい。
コードの意図は、
コンストラクタを使って初期値として要素数が1の構造体の配列を定義することです

発生している問題・エラー

匿名型のメンバー宣言子が無効です。メンバー代入、簡易名、またはメンバー アクセスを使用して、匿名型メンバーを宣言する必要があります。	

該当するソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Stagecode : MonoBehaviour
{
    
   
    // Update is called once per frame
    struct Gimmicks
    {
        public int x;
        public int y;
        public GameObject Gimmick;
        public int direction;
        public Gimmicks(int x,int y, GameObject Gimmick,int direction)
        {
            this.x = 1;
            this.y = 1;
            this.Gimmick = null;
            this.direction = 0;
        }
    }
    struct Pieces
    {
        public GameObject Piece;
        public int direction;
        public int amount;
        public Pieces(GameObject Piece,int direction, int amount )
        {
            this.amount = 1;
            this.direction = 0;
            this.Piece = null;
        }
    }
    struct Remixes
    {
        public GameObject Piece;
        public int direction;
       
        public Remixes(GameObject Piece,int direction )
        {
            
            this.direction = 0;
            this.Piece = null;
        }
    }
    struct Stages
    {
        public Gimmicks[] gimmicks;
        public Pieces[] pieces;
        public Remixes[,] remixes;
        public string Stagename;
        public int[] Test;
        public Stages(Gimmicks[] gimmicks, Pieces[] pieces,Remixes[,] remixes,string Stagenamen,int[] Test)
        {
            this.gimmicks = { new Gimmicks(1, 1, null, 0)};
            this.pieces ={ new Pieces(null, 0, 1)} ;
            this.remixes = { new Remixes(null, 0)};
            this.Stagename = "ステージ0";
            this.Test =new {1,0};

            
        }
    }
}

エラーが出ているのは一番下の構造体(Stage)のコンストラクタの中身で、gimmicks,pieces,remixes,Testから出ています

0

2Answer

 gimmicks、pieces、remixesは代入する配列の書き方が間違っていて、その書き方は変数を宣言する時だけ許されます。Testは右辺が匿名型になっていると思います。配列を代入するときに波括弧を使うのであればnew (型名)[] { … }と書くと良いと思います。
 あと、remixesは二次元配列ですが一次元配列を代入しようとしています。

0Like

こうではないでしょうか?

-            this.gimmicks = { new Gimmicks(1, 1, null, 0)};
+            this.gimmicks = new[]{ new Gimmicks(1, 1, null, 0)};
-            this.pieces ={ new Pieces(null, 0, 1)} ;
+            this.pieces =new []{ new Pieces(null, 0, 1)} ;
-            this.remixes = { new Remixes(null, 0)};
+            this.remixes = new [,]{ {new Remixes(null, 0)}};
             this.Stagename = "ステージ0";
-            this.Test =new {1,0};
+            this.Test =new []{1,0};

もしくはこうか

-            this.gimmicks = { new Gimmicks(1, 1, null, 0)};
+            this.gimmicks = [ new(1, 1, null, 0)];
-            this.pieces ={ new Pieces(null, 0, 1)} ;
+            this.pieces = [ new(null, 0, 1)] ;
-            this.remixes = { new Remixes(null, 0)};
+            this.remixes = new [,]{ {new Remixes(null, 0)}};
             this.Stagename = "ステージ0";
-            this.Test =new {1,0};
+            this.Test =[1,0];

0Like

Your answer might help someone💌