obsidian/笔记文件/2.笔记/UGUI整体解决方案-案例篇_第十一章.md
2025-03-26 00:02:56 +08:00

4.4 KiB
Raw Blame History

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

!Pasted image 20240329104807.png

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

!Pasted image 20240329120158.png

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

!Pasted image 20240329120250.png

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

!Pasted image 20240329120400.png

游戏业务类型,表现

!Pasted image 20240329120514.png

!Pasted image 20240329120502.png

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

!Pasted image 20240329120639.png

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

!Pasted image 20240329121551.png

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

!Pasted image 20240329121706.png

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

!Pasted image 20240329121856.png

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

!Pasted image 20240329124524.png

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

!Pasted image 20240329124733.png

两个继承子类的重写

!Pasted image 20240329125204.png

!Pasted image 20240329125230.png

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

!Pasted image 20240329130302.png

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

!Pasted image 20240329130437.png

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

!Pasted image 20240329130555.png

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

!Pasted image 20240329130651.png

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

!Pasted image 20240329130729.png

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

!Pasted image 20240329130855.png

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

!Pasted image 20240329141825.png

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

!Pasted image 20240329131547.png

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

!Pasted image 20240329140552.png