Unity C#にて配列が同期されてしまいます。
カードゲームを作りたく、使用するカードを入れる配列
(構造体で int[]card, string cardnameが入っています)
を作った所、作ってすぐの時はそれぞれに独立して、数値を入れられるのですが、
いざUnityて構うと4つ作った配列の内、一つのものをいじくるとすべての
値が変更されてしまうというトラブルが起こっています。
主なソースは以下のようになっています
//デッキの作成、この時は同じ初期デッキを作る
//UIを変更する所、主にこの配列を使っているのが次の所
C#
1コード 2void CreateDeck() 3 { 4 Decks = new Movecen.DecksData[4]; 5 6/*Movecen.DecksData{ 7string decksname; 8int[] cards; 9} 10*/ 11 for(int i = 0; i < 4; i++) 12 { 13 Decks[i].deckname = "NewDeck" + (i + 1).ToString(); 14 Decks[i].card = new int[100]; 15 Decks[i].card = Resources.Load<DeckEntity>("DeckEntityList/FastDeck").cards; 16//DeckEntity、初期のデッキが入っています 17 for(int k = 0; k < 10 && i == 0; k++) 18 { 19 Debug.Log("作成したデッキの" + k + "番目は" + Decks[0].card[k]); 20 } 21 22 } 23 24 //配列が同期しているかのテスト、ここでは同期しない事が判明したが、 25//Unity上では異変が起こっっていた 26 Debug.Log("変更前の0の0は" + Decks[0].card[0]); 27 Debug.Log("変更前の0の1は" + Decks[1].card[1]); 28 Decks[0].card[0] = 4; 29 Debug.Log("変更後の0の0は" + Decks[0].card[0]); 30 Debug.Log("変更後の0の1は" + Decks[1].card[1]); 31 32 33 34 }
次の所が主にこの構造体を使っている所です
C#
1コード 2 public void DeckSet()//デッキのカードをセットする 3 { 4 Debug.Log("デッキセットです"); 5 //ひとまず、前にあったカードを削除する 6 foreach (CardController card in Decks.GetComponentsInChildren<CardController>()) 7 {//ここで前に表示されていたカードを消します 8 Destroy(card.gameObject); 9 } 10 11 DeckDropPlace[] Okibas = Decks.GetComponentsInChildren<DeckDropPlace>(); 12 int Cardbasyo = 0; 13 //カード置き場を読み込む 14 int[] kari = new int[100]; 15 Array.Copy(deckManager.Decks[deckManager.DeckLod].card,kari,100); 16 17 //このkariにデッキのカード達を入れておく 18 //if(deckManager.DeckLod != 0)return; 19 for(int i = 0; i < MetaNumber.CARDNUMBER; i++) 20 { 21 Debug.Log("kariのこの数は" + kari[i]); 22 while(kari[i] > 0) 23 { 24 GameObject thiscard = Instantiate(CARD, Okibas[Cardbasyo].transform);//置き場所にカードを召喚する 25 thiscard.transform.position = Okibas[Cardbasyo].transform.position; 26 CardController cardC = thiscard.GetComponent<CardController>(); 27 cardC.Init(i);//カードの初期化、ここでカードの情報を入れる 28 cardC.placenumber = i; 29 kari[i]--;//kariの数を引きく 30 Cardbasyo++; 31 } 32 } 33 // Debug.Log("仮のリストでの調整後" + deckManager.Decks[0].card[0]); 34 35 }
Unityのエディターで起動させるだけなら、ここが全てです。どこかで
同期してしまったのか、教えて下さると幸いです。

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