現在記憶スロットの用なものをListで作っていて、フィールド上に存在する特定のオブジェクトを選んで記憶するとListに格納されていく という感じのものなんですが、現在そのListに入っているものをわかりやすくするために画面に記憶スロットに入っているオブジェクトに対応するImageを表示させたいな、と思っております。
最初は画面にそれぞれUIを配置してアクティブを切り替える方法でやっていたのですが、数が多くなると大変だと思ったのと、最初記憶できるのは一つだけで、強化アイテムを取得すると記憶できる個数が増え、(最大三つまで、3つとも画面に表示)一つ一つアクティブを切り替えていくのはわけがわからなくなってしまってしまったので断念しました…。
記憶スロットはこのように(↓)作っています。記憶できるオブジェクト二つなのに記憶スロットの上限3つもいらないじゃん と思われるかもしれませんが、後々増えていくので気が付かなかったことにしておいてください…。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5 6//記憶できるオブジェクトはここに追加 7public enum Gimmick 8{ 9 Empty = 0, //空っぽ 10 Box, 11 SignBoard, 12} 13 14 15/* 記憶スロット */ 16public class MemorySlot : MonoBehaviour 17{ 18 //最大スロット数 19 const int MaxSlotSize = 3; 20 21 //記憶スロット 22 List<Gimmick> m_Slot = new List<Gimmick>(); 23 24 //今選択中のスロットの番号 25 int m_CurrentSlectedIndex = 0; 26 27 //UI用 一つひとつインスペクターで設定してアクティブを切り替えるのはどうかと思う 28 public GameObject box_Image; 29 public GameObject signBoard_Image; 30 public GameObject box2_Image; 31 public GameObject signBoard2_Image; 32 public GameObject box3_Image; 33 public GameObject signBoard3_Image; 34 public GameObject lock_2; 35 public GameObject lock_3; 36 37 38 void Start() 39 { 40 //最初は空っぽ 41 m_Slot.Add(Gimmick.Empty); 42 43 //ほか二つは解放されていないのでロックされてるテクスチャを 44 lock_2.SetActive(true); 45 lock_3.SetActive(true); 46 47 } 48 49 //スロットを追加する 50 public void AddSlot() 51 { 52 //スロット数がすでにマックスだったらなんもしない 53 if (m_Slot.Count >= MaxSlotSize) return; 54 55 //空っぽのスロットを追加 56 m_Slot.Add(Gimmick.Empty); 57 if (m_Slot.Count == 2) 58 { 59 lock_2.SetActive(false); 60 } 61 else if (m_Slot.Count == 3) 62 { 63 lock_3.SetActive(false); 64 } 65 66 } 67 68 //ギミックをスロットに追加 69 public void SetGimmick(Gimmick gimmick) 70 { 71 m_Slot.Insert(0, gimmick); //先頭に追加 addだと末尾に追加されてしまう。 72 73 m_Slot.RemoveAt(m_Slot.Count - 1); //末尾の項目を消す こうすることで古いのが消えて新しいものが入っていく 74 } 75 76 //選択項目をずらす 77 public void ChangeSelected() 78 { 79 //Indexを+1した数をスロットの数で割る 80 //ボタンを押すと一つずれて一番上でボタンを押すと下に戻ってくる 81 m_CurrentSlectedIndex = (m_CurrentSlectedIndex + 1) % m_Slot.Count; 82 } 83 84 //現在選択されているGimmickを選択する 85 public Gimmick CurrentSelected 86 { 87 get 88 { 89 return m_Slot[m_CurrentSlectedIndex]; 90 } 91 } 92 93 //デバッグ用 94 /* public void DebugDump() 95 { 96 print("-------------"); 97 for (int i = 0; i < m_Slot.Count; i++) 98 { 99 print("[" + i + "] " + m_Slot[i]); 100 //print(m_Slot.Count); 101 } 102 print("-------------"); 103 } 104 */ 105} 106 107 108
文章がわかりにくく申し訳ないのですが、画面に3つのスロットすべて表示させる という仕様はあきらめたくないので質問しましたm(__)m
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。