2017-07-14 11 views
0

私はデジタルカードゲームにさまざまな種類のカードをすばやく簡単に作成できる2つのスクリプトを作成しようとしています。ほとんどのスクリプトは動作しますが、カードの種類に応じてカードの背景色を変更する際に問題があります。ここでUnityの列挙型の問題C#を使用したデジタルカードゲーム

は、私はそれがあるカードの種類と、それがどのように動作するかを述べることができるでしょう「カード資産スクリプト」です:

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public enum CardType 
{ 
    Weapon, 
    Armour, 
    Spell, 
    Environment 
} 

public class CardAsset : ScriptableObject 
{ 
    // this object will hold the info about the most general card 
    [Header("General info")] 
    public CharacterAsset characterAsset; // if this is null, it`s a neutral 
    card 
    [TextArea(2,3)] 
    public string Description; // Description for spell or character 
    public Sprite CardImage; 
    public CardType Cardtype; 

    [Header("Weapon Info")] 
    public int Defence; 
    public int Attack; 
    public int Speed; 
    public string WeaponScriptName; 
    public int specialCreatureAmount; 

    [Header("Spell Info")] 
    public string SpellScriptName; 
    public int specialSpellAmount; 
} 

は今ここに、ビジュアルのすべてを編集する1つのカードマネージャのためのスクリプトがあります各カードのカードアセットの要素と一致する要素:

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class OneCardManager : MonoBehaviour { 

    public CardAsset cardAsset; 
    public OneCardManager PreviewManager; 
    private CardType Cardtype; 
    [Header("Text Component References")] 
    public Text NameText; 
    public Text DescriptionText; 
    public Text ArmourText; 
    public Text AttackText; 
    public Text SpeedText; 
    [Header("GameObject References")] 
    public GameObject DefenceIcon; 
    public GameObject AttackIcon; 
    public GameObject SpeedIcon; 
    [Header("Image References")] 
    public Image CardTopRibbonImage; 
    public Image CardGraphicImage; 
    public Image CardFaceBodyImage; 
    public Image CardBackBodyImage; 
    public Image CardBackDecoration; 
    public Image CardFaceFrameImage; 
    public Image CardFaceGlowImage; 
    private bool Weapon_Choosen; 
    private bool Armour_Choosen; 
    private bool Spell_Choosen; 
    private bool Environment_Choosen; 

    public void ChooseCardType() 
    { 
     CardType Type; 
     Type = CardType.Weapon;  
    } 

    void Awake() 
    {   
     if (cardAsset != null) 
      ReadCardFromAsset(); 
    } 

    private bool canBePlayedNow = false; 
    public bool CanBePlayedNow 
    { 
     get 
     { 
      return canBePlayedNow; 
     } 

     set 
     { 
      canBePlayedNow = value; 

      CardFaceGlowImage.enabled = value; 
     } 
    } 


    CardType ChangeColour(CardType Type) 
    { 

     if (Type == CardType.Weapon) 
     { 
      Weapon_Choosen = true; 
      Type = CardType.Weapon; 
     } 
     else if (Type == CardType.Armour) 
     { 
      Armour_Choosen = true; 
      Type = CardType.Armour; 
     } 
     else if (Type == CardType.Spell) 
     { 
      Spell_Choosen = true; 
      Type = CardType.Spell; 
     } 
     else if (Type == CardType.Environment) 
     { 
      Environment_Choosen = true; 
      Type = CardType.Environment; 
     } 

     return Type; 
    } 


    public void ReadCardFromAsset() 
    { 
     if (Weapon_Choosen == true) 
     { 
      CardFaceBodyImage.color = Color.red; 
      CardBackBodyImage.color = Color.red; 
      Debug.Log("Applied Red to the card"); 
     } 
     else if (Armour_Choosen == true) 
     { 
      CardFaceBodyImage.color = Color.blue; 
      CardBackBodyImage.color = Color.blue; 
      Debug.Log("Applied Blue to the card"); 
     } 
     else if (Spell_Choosen == true) 
     { 
      CardFaceBodyImage.color = Color.green; 
      CardBackBodyImage.color = Color.green; 
      Debug.Log("Applied Green to the card"); 
     } 
     else if (Environment_Choosen == true) 
     { 
      CardFaceBodyImage.color = Color.yellow; 
      CardBackBodyImage.color = Color.yellow; 
      Debug.Log("Applied Yellow to the card"); 
     } 
     NameText.text = cardAsset.name; 
     DescriptionText.text = cardAsset.Description; 
     CardGraphicImage.sprite = cardAsset.CardImage; 
     if ((Cardtype == CardType.Weapon) || (Cardtype == CardType.Armour)) 
     { 
      AttackText.text = cardAsset.Attack.ToString(); 
      ArmourText.text = cardAsset.Defence.ToString(); 
      SpeedText.text = cardAsset.Speed.ToString(); 
     } 
     if (PreviewManager != null) 
     { 
      PreviewManager.cardAsset = cardAsset; 
      PreviewManager.ReadCardFromAsset(); 
     } 
    } 
} 

いずれかのアイデアはありますか?

編集:問題の内容を明らかにしてください。私がしたいのは、Card Assetスクリプトでカードの種類が定義されている場合、そのカードの種類がカードの種類であるかどうかを特定し、その種類に応じて背景の色を変更することができます(赤色は武器カード、青色アーマーカードの場合は緑、呪文カードの場合は緑、環境カードの場合は黄色)。

しかし、カードの種類が定義されていても、カードの背景の色は変更されません。

+4

これをできるだけ[mcve]に減らしてください(完全に実現できないことに気付きます)。現時点では、「あなたが持っている問題は、そのカードの種類に応じてカードの背景の色を変えることですが、問題の説明は*していません」と言います。現時点で何が起こっているかと比べて何が起こっていますか? –

+0

john skeetのように、実際の問題は何であるか分かりませんが、 'ChangeColor(CardType)'では 'Cardtype'クラスフィールドの代わりに' Type'を使用していると思います。 – yes

+0

私はカードが彼らがカードの種類に基づいて色を変更するためにそれらのために起こってほしい(例えば、武器カードは赤、アーマーカードは青、呪文カードは緑、環境カードは黄色です。)しかし、起こっているのは、カードアセットスクリプトで1種類のカードが選択されていても、カードの背景がまだゲームで白く出ているということです。 – Will9455

答えて

0

私はあなたがそれに加えて、他のいくつかの()の場合 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/switch

の代わりにスイッチを使用するように推奨することから始めますが、私はあなたのコードのロジックで問題があると思います。 awakeから、cardAsset!= nullの場合、ReadCardFromAsset()が呼び出されています。 ReadCardFromAsset(インサイド

すでにアクティブになっている4つのフラグのどの評価している:Weapon_Choosen、Armour_Choosen ...しかし、私は見るように、それらのフラグのみが呼び出されませんChangeColour()、中に真になります。

関連する問題