01.卡牌基类接口

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

public interface ICard
{
CardModel Model { get;}
CardType Type { get; }
SizeType Size { get;}
void Init(CardModel cardModel);
void SetRaycastState(bool isReceive);
}

02.卡牌基类

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

public abstract class CardBase : MonoBehaviour,ICard
{
public CardModel Model { get; private set; }
public CardType Type { get; private set; }

public SizeType Size
{
get { return SizeType.NormalCard;}
}

private Image _image;

public Image RayCasetImage
{
get
{
if (_image==null)
{
_image = this.GetComponent<Image>();
}

return _image;
}
}

public virtual void Init(CardModel cardModel)
{
this.Model = cardModel;
this.Type = (CardType)cardModel.Type;
InitIcon(cardModel.SpriteName);
InitRarity((RarityType) cardModel.RarityType);
InitName(cardModel.Name);
InitCost(cardModel.Cost);
SetRaycastState(true);
}

public void SetRaycastState(bool isReceive)
{
RayCasetImage.raycastTarget = isReceive;
}
private void InitIcon(string spriteName)
{
GetIconImage().sprite = Resources.Load<Sprite>($"Card/{spriteName}");
}

protected abstract Image GetIconImage();

private void InitRarity(RarityType rarity)
{
transform.Find("Rarity").GetComponent<Image>().sprite = GetRaritySprite( rarity);
}

protected abstract Sprite GetRaritySprite(RarityType rarity);

private void InitName(string cardName)
{
transform.Find("Name/Text").GetComponent<Text>().text = cardName;
}
private void InitCost(int cost)
{
transform.Find("Cost").GetComponent<Image>().sprite = GetCostSprite(cost);
}

private Sprite GetCostSprite(int cost)
{
Sprite[] sprites = Resources.LoadAll<Sprite>("Card/TextInlineImages");
return sprites[cost];
}


}

03.卡牌数据类

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

public struct CardModel
{
// 卡牌费用
public int Cost { get; set; }
public string Name { get; set; }
public string SpriteName { get; set; }
public int Type { get; set; }
public int Attack { get; set; }
// 卡牌Hp
public int Life { get; set;}
// 稀有度
public int RarityType { get; set; }
}

public enum SizeType
{
NormalCard,
MiniCard,
}

public enum CardType
{
/// <summary>
/// 法术卡
/// </summary>
MagicCard,
/// <summary>
/// 随从卡
/// </summary>
MinionCard,
}

public enum RarityType
{
Normal,
Rare,
Epic,
Legend,
}

04.法术卡

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

/// <summary>
/// 法术卡
/// </summary>
public class MagicCard:CardBase
{
public override void Init(CardModel cardModel)
{
base.Init(cardModel);

}

protected override Image GetIconImage()
{
return transform.Find("Icon").GetComponent<Image>();
}

protected override Sprite GetRaritySprite(RarityType rarity)
{
Sprite[] sprites = Resources.LoadAll<Sprite>("Card/Card_Inhand_Ability_Druid");
switch (rarity)
{
case RarityType.Normal:
return sprites[4];
case RarityType.Rare:
return sprites[0];
case RarityType.Epic:
return sprites[2];
case RarityType.Legend:
return sprites[3];
default:
return null;
}
}
}

05.随身卡

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

/// <summary>
/// 随从卡
/// </summary>
public class MinionCard :CardBase
{
public override void Init(CardModel cardModel)
{
base.Init(cardModel);
InitAttack(cardModel.Attack);
InitLife(cardModel.Life);
}

private void InitAttack(int num)
{
transform.Find("Attack/Text").GetComponent<Text>().text = num.ToString();
}

private void InitLife(int num)
{
transform.Find("Life/Text").GetComponent<Text>().text = num.ToString();
}

protected override Image GetIconImage()
{
return transform.Find("IconMask/Icon").GetComponent<Image>();
}

protected override Sprite GetRaritySprite(RarityType rarity)
{
Sprite[] sprites = Resources.LoadAll<Sprite>("Card/Card_Inhand_Minion_Paladin");
switch (rarity)
{
case RarityType.Normal:
return sprites[5];
case RarityType.Rare:
return sprites[0];
case RarityType.Epic:
return sprites[3];
case RarityType.Legend:
return sprites[4];
default:
return null;
}
}
}