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