前提・実現したいこと
Unityでゲームを作っています。
実現したい動作は以下の通りです。
1.画面上に色々なアイテムが散らばっている。
(ゲーム進行に従って、種類が増えたり減ったりします。)
2.タッチしていくとアイテムが消える。
3.画面上のアイテムをすべて消し終わると、再び最初の1の状態になる。
(同じアイテムが元通り復活して、再びタッチできるようになる)
発生している問題
GameObjectのListを用いて上記動作を実現しようとしていますが、うまくいきません。
現在試していることは、以下の2通りです。
方法A
1.ListAとListBを二つ作成しておき、ListAには画面上に表示されたアイテムを入れる。ListBは空。
2.Removeを用いてListAからタッチされたアイテムを消していく。(アイテムには識別用として個々にナンバーを振ってあり、タッチされた際このナンバーを渡すことで、Listの中のどのアイテムを消すのか区別しようとしています)
3.RemoveされたItemを、今度はListBにAddで追加。
4.ListAのCountが0になったら、、ListAにListBの内容をコピーし、
再びSetActiveで表示させ、元通りの画面になる。
方法B
1.画面上に表示されたアイテムを入れるListAとListBを二つ作成しておく。(二つとも同じ内容です。)
2.上記2と同じです。
3.ListAのCountが0になったら、ListAにListBの内容をコピー。
ListAの中身を再びSetActiveで表示させ、元通りの画面になる。
いずれにしても、うまく動きません。
方法Aは、ListBへのAddができず、
方法Bは、なぜか2種類目のアイテムのRemoveができず…という感じです
該当のソースコード
以下は方法Aのコードです。
C#
1public void ItemReturn(int ItemNumber)//アイテムをタッチすると発動 2 { 3 ListA.Remove(Item[ItemNumber]);//Itemの配列に登録されたItemを番号で探してリムーブ 4 ListB.Add(Item[myNumber]);//消したアイテムを登録 5 if (ListA.Count <= 0) //すべて消し終わったら復活 6 { 7 ListA = new List<GameObject>(ListB); 8 ListB.Clear(); 9 StartCoroutine(ListAFukkatsu()); 10 } 11 12public IEnumerator ListAFukkatsu() 13 { 14 yield return new WaitForSeconds(FukkatsuSpeed); 15 16 for (int i = 0; i <= ListA.Count; i++)//再びすべてを表示(コルーチンで待機) 17 { 18 ListA[i].SetActive(true); 19 ListA[i].GetComponent<CanvasGroup>().alpha = 1; 20 } 21 }
以上になります。
正しいやり方がわからず、困っております。
何かご提案ありましたら、どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー