前提・実現したいこと
Unityでカードゲームを作ろうとしています。
現在、デッキエディット画面を作ろうとしています。
前回の質問にて、カード検索にenum型(Flags属性付き)を取り入れようとしています。
swich文で1つ1つ書けばおそらく苦労せずにできるのでしょうが、
以前の質問で長文を短縮できたのにまた長文を書くのはどうかと思い質問しました。
追記
実現したいこととしては、取り込んであるカードの一覧からカードのタイプで絞り込みをかけたい、
ということです。
ソースコードでは CardType.何々 となるところの何々にドロップダウンのテキストを持ってきたいと思っています。
また、カードデータはエクセルに取り込んであり、typeにカードの持つタイプ(光,精霊 のような)を、 type_fにカードの持つタイプのフラグ(光,精霊なら513のような)を記入して取り込めるようにしてあります。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System; 6using System.Linq; 7public class CardModelU 8{ 9 public string id; 10 public string name1; 11 public string name2; 12 public int level; 13 public string type; 14 public int attack; 15 public int defence; 16 public string tag; 17 public string effect1; 18 public string effect2; 19 public string effect3; 20 public ulong type_f; 21} 22 23[Flags] 24public enum CardType :ulong 25{ 26 タイプなし = 0, 27 光 = 1, 28 闇 = 2, 29 地 = 4, 30 水 = 8, 31 炎 = 16,//4 32 風 = 32, 33 氷 = 64, 34 雷 = 128, 35 魔術師 = 256,//8 36 精霊 = 512, 37 戦士 = 1024, 38 ドラゴン = 2048, 39 神話 = 4096,//12 40 鳥 = 8192, 41 岩石 = 16384, 42 魚 = 32768, 43 悪鬼 = 65536,//16 44 機械 = 131072, 45 人形 = 262144, 46 天使 = 524288, 47 PSI = 1048576,//20 48 建造物 = 2097152, 49 植物 = 4194304, 50 獣 = 8388608, 51 幻想 = 16777216,//24 52 死霊 = 33554432, 53 侍 = 67108864, 54 地雷 = 134217728, 55 呪い = 268435456,//28 56 虫 = 536870912, 57 重力 = 1073741824, 58 鎧 = 2147483648, 59 結界 = 4294967296,//32 60 書物 = 8589934592, 61 剣 = 17179869184, 62 刀 = 34359738368, 63 鎖 = 68719476736,//36 64 薬 = 137438953472, 65 盾 = 274877906944 66} 67public class CardSearch : MonoBehaviour 68{ 69 List<CardModelU> allUnitList = new List<CardModelU>(); 70 public InputField Level; 71 public InputField ATK; 72 public InputField DEF; 73 public InputField Text; 74 public Dropdown kindDD1; 75 public Dropdown kindDD2; 76 public Dropdown Type; 77 public GameObject SearchArea; 78 public GameObject CardData; 79 public GameObject CardID_; 80 GameObject Obj; 81 [SerializeField] private unit unit; 82 83 public void CardSEARCH() 84 { 85 86 foreach (Transform child in SearchArea.transform) 87 { 88 Destroy(child.gameObject); 89 } 90 IEnumerable<CardModelU> resultU = allUnitList.Where(s => kindDD1.value == 0 || kindDD1.value == 1); 91 if (Type.value != 0) 92 { 93 //ここでカードタイプによる絞り込み 94 } 95 if (Level.text != "") 96 { 97 resultU = resultU.Where(s => s.level.ToString() == Level.text); 98 } 99 if (ATK.text != "") 100 { 101 resultU = resultU.Where(s => s.attack.ToString() == ATK.text); 102 } 103 if (DEF.text != "") 104 { 105 resultU = resultU.Where(s => s.defence.ToString() == DEF.text); 106 } 107 if (Text.text != "") 108 { 109 resultU = resultU.Where(s => s.name1.ToString().Contains(Text.text) || 110 s.name2.ToString().Contains(Text.text) || 111 s.effect1.ToString().Contains(Text.text) || 112 s.effect2.ToString().Contains(Text.text) || 113 s.effect3.ToString().Contains(Text.text)); 114 } 115 foreach (CardModelU modelU in resultU) ShowU(modelU); 116 117 } 118 public void ShowU(CardModelU modelU) 119 { 120 CardData.GetComponent<CardD>().ShowU(modelU); 121 Obj = Instantiate(CardData, this.transform.position, Quaternion.identity); 122 Obj.GetComponent<CardID>().cardID = modelU.id; //この辺のIDの取り回しは要確認 123 Obj.transform.parent = SearchArea.transform; 124 } 125 126 void Start() 127 { 128 int UD = unit.Sheet1.Count; 129 130 131 for (int i = 0; i < UD; i++) 132 { 133 var cardModelU = new CardModelU() 134 { 135 id = unit.Sheet1[i].id, 136 name1 = unit.Sheet1[i].name1, 137 name2 = unit.Sheet1[i].name2, 138 level = unit.Sheet1[i].level, 139 type = unit.Sheet1[i].type, 140 attack = unit.Sheet1[i].attack, 141 defence = unit.Sheet1[i].defence, 142 tag = unit.Sheet1[i].tag, 143 effect1 = unit.Sheet1[i].effect1, 144 effect2 = unit.Sheet1[i].effect2, 145 effect3 = unit.Sheet1[i].effect3, 146 type_f = unit.Sheet1[i].type_f 147 }; 148 allUnitList.Add(cardModelU); 149 } 150 151 } 152}
試したこと
ドロップダウンのテキストはDropDown.captionText.textで読み込めるようですがenumの後(ソースコードではCardType)に記入してみたりした(CardType.(Type.captionText.text)というふうに)のですができませんでした。
回答1件
あなたの回答
tips
プレビュー