运行游戏,这是类炉石的UI界面

卡牌的数据逻辑总类,其中包含,打出该卡牌,需要的费用、卡片名称、图片资源名称,卡牌类型、攻击力

其他的字段,分别是生命值、稀有度; SizeType枚举,指的是卡牌所在位置的大小种类;

后续还有俩枚举,对应的分别是,卡牌对应的游戏业务类型,和稀有度

游戏业务类型,表现

卡牌使用对象池管理,包含活跃列表,不活跃列表,父类节点,对应加载的预制体,还有卡牌相关的,逻辑种类数组_component; 初始化函数,对各个声明的变量,完成赋值初始化即可,其中类型数组,是用了不定数量的可变参数params,参考params 用法简介即可;

对象池中,创建一个新实体的函数接口,通过Instantiate实例化出来之后,遍历逻辑种类数组,加到这个实体即可

加载对象的 Spawn 和 卸载对象的 Despwan 逻辑,就是操作_inactiveList和_activeList两个队列容器,如果容器没数据,就调用上述SpawnNew创建新实体即可

这是卡牌的基类接口,包含卡牌数据模型、卡牌类型、尺寸,和Init初始化函数,还有一个SetRaycastState是用来设置射线检测的

卡牌的Base逻辑基类,继承自ICard接口,和unity挂载的MonoBehaviour,包含数据模型,卡牌类型,尺寸等获取器; 还有图片和相关获取器;

其中各个函数,包含设置是否开启,射线检测; 从资源目录的Card文件夹,通过spriteName命名,加载对应的图片资源; GetIconImage抽象函数,会在继承子类中,完成重写,分别是获取,不同类型卡片的Icon图片节点位置; InitRarity就是初始化设置,稀有度图片,而GetRaritySprite抽象函数,是获取不同类型卡牌,对应的稀有度图片,这个也会在继承子类,完成重写; InitName就是初始化,卡牌的命名了;

两个继承子类的重写

MagicCard和MinionCard,这两个子类,都是大卡,只是怪兽卡和魔法卡,这种业务玩法上的类型区别,运行游戏,表现如此

这是怪兽卡,对应的业务逻辑,除了上述的图片和稀有度函数重写,还有两个初始化函数,分别是攻击力和生命值相关

这是魔法卡,对应的业务逻辑就相对更简单,只有上述的两个函数重写

运行游戏,表现上,是这个样式,命名为MiniCard

对应的逻辑,继承自ICard基类接口,其中声明的变量,包括各个获取器

其余函数方法,包含设置射线检测,图片赋值,卡牌消耗图片初始化,使用Resources.LoadAll拿到所有的,消耗相关,图片容器,通过cost作为索引,拿到对应的,卡牌消耗图片

还有一个设置背景图片的函数接口

卡牌对象池,对应的管理类逻辑,会声明一个_pools字典容器,用字符串作为key,统一管理对象池; 添加一个对象池的函数是AddPool,也就是通过Resources.Load的资源加载方法,拿到对应的预制体,再new CardPool创建一个新的对象池,以这个对应的预制体名字作为key,加到对象池字典,统一管理即可; 在Init初始化函数中,新增一个Cache实体,用来作为对象池的父节点,再调用AddPool方法,新增3个对象池统一管理,三种类型的卡牌即可; 当前,其中不定长参数component都是传递了3个参数,分别是卡牌类型,卡牌拖曳逻辑,卡牌区域触发逻辑;

对象池管理类,还会有同名函数,分别调用,对象池的加载和卸载逻辑