前提・実現したいこと
Unityでカードゲームを作ろうとしています。
現在、デッキエディット画面を作ろうとしています。
前回の質問で下記の画像の赤い矢印にマウスオーバーしたときに、
下記のようなカード情報を表示はできたのですが、
各オブジェクトに対応した情報を表示することができずに困っています。
問題を解決するには生成したオブジェクトにカードIDを付属させられればいいと考えているのですがどのようにすればいいでしょうか?
カードIDはカード情報をカード種ごとに別のエクセルで管理しているので文字列のほうが都合がいいと思います。
関連したソースコード
マウスオーバーしたにカードIDを出すスプリクト
C#
1using UnityEngine; 2using System; 3using UnityEngine.EventSystems; 4 5public class CardID : MonoBehaviour, IPointerEnterHandler 6{ 7 int cardID ; 8 public event Action<int> OnPointerCard; 9 10 public void OnPointerEnter(PointerEventData eventData) 11 { 12 OnPointerCard?.Invoke(cardID); // マウスオーバーしたのでカードIDを発火 13 } 14} 15 16
表示を実行するスプリクト
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Mouse : MonoBehaviour 7{ 8 public GameObject CardV; 9 void Update() 10 { 11 // 画面上にあるCardスクリプトを持つオブジェクトを取得 12 var allCardInScreen = FindObjectsOfType<CardID>(); 13 14 // マウスオーバーイベントを購読 15 foreach (CardID c in allCardInScreen) 16 { 17 c.OnPointerCard += cardID => { 18 CardV.GetComponent<CardView2>().ShowViewU(cardID); 19 }; 20 } 21 } 22 }
情報表示のテンプレート
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class CardView2 : MonoBehaviour 7{ 8 [SerializeField] Image Image; 9 [SerializeField] Text Name2Text; 10 [SerializeField] Text Name1Text; 11 [SerializeField] Text TypeText; 12 [SerializeField] Text KindText; 13 [SerializeField] Text EffectText; 14 [SerializeField] private unit unit; 15 [SerializeField] private item item; 16 [SerializeField] private spel spel; 17 void Start() 18 { 19 Image.sprite = Resources.Load<Sprite>("CardImage/裏面"); 20 Name2Text.text = ""; 21 Name1Text.text = ""; 22 TypeText.text = ""; 23 KindText.text = ""; 24 EffectText.text = ""; 25 } 26 27 public void ShowViewU(int x) 28 { 29 Image.sprite = Resources.Load<Sprite>("CardImage/" + unit.Sheet1[x].id + " " + unit.Sheet1[x].name1); 30 Name2Text.text = unit.Sheet1[x].name2; 31 Name1Text.text = unit.Sheet1[x].name1 + " Lv" + unit.Sheet1[x].level; 32 TypeText.text = "タイプ:" + unit.Sheet1[x].type; 33 KindText.text = "ユニットカード|ATK/" + unit.Sheet1[x].attack + " DEF/" + unit.Sheet1[x].defence; 34 EffectText.text = unit.Sheet1[x].effect1 + "\n" + unit.Sheet1[0].effect2 + "\n" + unit.Sheet1[x].effect3; 35 } 36 public void ShowViewI(int x) 37 { 38 Image.sprite = Resources.Load<Sprite>("CardImage/" + item.Sheet1[x].id + " " + item.Sheet1[x].name1); 39 Name2Text.text = item.Sheet1[x].name2; 40 Name1Text.text = item.Sheet1[x].name1 + " Lv" + item.Sheet1[x].level; 41 TypeText.text = "タイプ:" + item.Sheet1[x].type; 42 KindText.text = "アイテムカード|" + item.Sheet1[x].kind + "アイテム"; 43 EffectText.text = item.Sheet1[x].effect1 + "\n" + item.Sheet1[x].effect2 + "\n" + item.Sheet1[x].effect3 + "\n" + item.Sheet1[x].effect4; 44 } 45 public void ShowViewS(int x) 46 { 47 Image.sprite = Resources.Load<Sprite>("CardImage/" + spel.Sheet1[x].id + " " + spel.Sheet1[x].name1); 48 Name2Text.text = spel.Sheet1[x].name2; 49 Name1Text.text = spel.Sheet1[x].name1 + " Lv" + spel.Sheet1[x].level; 50 TypeText.text = "タイプ:" + spel.Sheet1[x].type; 51 KindText.text = "スペルカード|" + spel.Sheet1[x].kind + "スペル"; 52 EffectText.text = spel.Sheet1[x].effect1 + "\n" + spel.Sheet1[x].effect2 + "\n" + spel.Sheet1[x].effect3 + "\n" + spel.Sheet1[x].effect4; 53 } 54 55}
赤い矢印先のオブジェクトのテンプレート
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System; 6using UnityEngine.EventSystems; 7 8public class CardD : MonoBehaviour 9{ 10 [SerializeField] Image IconImage; 11 [SerializeField] Text NameText; 12 [SerializeField] Text TypeText; 13 [SerializeField] Text KindText; 14 [SerializeField] Text LvText; 15 [SerializeField] private unit unit; 16 [SerializeField] private item item; 17 [SerializeField] private spel spel; 18 19 20 public void ShowDataU(int x) 21 { 22 IconImage.sprite = Resources.Load<Sprite>("CardImage/"+ unit.Sheet1[x].id+" "+unit.Sheet1[x].name1); 23 NameText.text = unit.Sheet1[x].name1; 24 LvText.text = "Lv" + unit.Sheet1[x].level; 25 TypeText.text = unit.Sheet1[x].type; 26 KindText.text = "ATK/" + unit.Sheet1[x].attack.ToString() + " DEF/" + unit.Sheet1[x].defence.ToString(); 27 } 28 public void ShowDataI(int x) 29 { 30 IconImage.sprite = Resources.Load<Sprite>("CardImage/" + item.Sheet1[x].id + " " + item.Sheet1[x].name1); 31 NameText.text = item.Sheet1[x].name1; 32 LvText.text = "Lv" + item.Sheet1[x].level; 33 TypeText.text = item.Sheet1[x].type; 34 KindText.text = "アイテム|"+item.Sheet1[x].kind+"アイテム"; 35 } 36 public void ShowDataS(int x) 37 { 38 IconImage.sprite = Resources.Load<Sprite>("CardImage/" + spel.Sheet1[x].id + " " + spel.Sheet1[x].name1); 39 NameText.text = spel.Sheet1[x].name1; 40 LvText.text = "Lv" + spel.Sheet1[x].level; 41 TypeText.text = spel.Sheet1[x].type; 42 KindText.text = "スペル|" + spel.Sheet1[x].kind + "スペル"; 43 } 44}
2020/06/05追記
矢印の部分の表示をするスプリクトの根幹部分(全文はすごく長文になってしまっているので省略)
C#
1 public void UnitSearch(int x) 2 { 3 CardData.GetComponent<CardD>().ShowDataU(x); 4 Obj = Instantiate(CardData, this.transform.position, Quaternion.identity); 5 Obj.transform.parent = SearchArea.transform; 6 } 7 public void SpelSearch(int x) 8 { 9 CardData.GetComponent<CardD>().ShowDataS(x); 10 Obj = Instantiate(CardData, this.transform.position, Quaternion.identity); 11 Obj.transform.parent = SearchArea.transform; 12 } 13 public void ItemSearch(int x) 14 { 15 CardData.GetComponent<CardD>().ShowDataI(x); 16 Obj = Instantiate(CardData, this.transform.position, Quaternion.identity); 17 Obj.transform.parent = SearchArea.transform; 18 }
このxにfor文で条件にあったiを代入している感じです。
2020/06/07追記
回答を元に変更してみました。
CardIDのcardIDの値をエクセルのデータのidに変化させることはできました。(インスペクターで確認)
しかし、マウスオーバー時の購読がうまく行ってないようです。
下記に変更した文を記載します。
C#
1using UnityEngine; 2using System; 3using UnityEngine.EventSystems; 4 5public class CardID : MonoBehaviour, IPointerEnterHandler 6{ 7 public string cardID ; 8 public event Action<string> OnPointerCard; 9 10 public void OnPointerEnter(PointerEventData eventData) 11 { 12 OnPointerCard?.Invoke(cardID); // マウスオーバーしたのでカードIDを発火 13 } 14} 15 16using System.Collections; 17using System.Collections.Generic; 18using UnityEngine; 19using UnityEngine.UI; 20 21public class Mouse : MonoBehaviour 22{ 23 public GameObject CardV; 24 public int _cardID; 25 string _c; 26 void Update() 27 { 28 // 画面上にあるCardスクリプトを持つオブジェクトを取得 29 var allCardInScreen = FindObjectsOfType<CardID>(); 30 31 // マウスオーバーイベントを購読 32 foreach (CardID c in allCardInScreen) 33 { 34 35 c.OnPointerCard += cardID => { 36 Debug.Log(cardID);//ここでなぜか2が出力される 37 if (cardID.Contains("CUU")) 38 { 39 _c = cardID.Replace("CUU", ""); 40 int.TryParse(_c, out _cardID); 41 _cardID = _cardID - 1; 42 CardV.GetComponent<CardView2>().ShowViewU(_cardID); 43 } 44 }; 45 } 46 } 47} 48 49 public void UnitSearch(int x) 50 { 51 CardData.GetComponent<CardD>().ShowDataU(x); 52 Obj = Instantiate(CardData, this.transform.position, Quaternion.identity); 53 CardID_.GetComponent<CardID>().cardID =unit.Sheet1[x].id; 54 Obj.transform.parent = SearchArea.transform; 55 }
MouseでなぜかcardIDが2になってしまっています。
どうすればCardIDのcardIDになると思いますか?
回答1件
あなたの回答
tips
プレビュー