前期准备
我们制作卡牌游戏之前,先得拿到一套可用的素材,这里我们使用的是卡牌游戏素材。
在上方状态栏中,窗口下的资源商店中搜索2D Modular Cards Kit Demo
,点击下载即可。下载完成后,仍然是在窗口下的包管理器中,选择我的资产,下载后导入即可。
导入好素材后,我们还需要处理一二。选择 Sprite Texture Folder 下的 Cards 在 Inspector 中,将 Texture Type 改为 Sprite(2D and UI)。Sprite Mode 改为 Multiple,点击 Sprite Editor,点击 Slice,选择 Type 为 Automatic 即可,点击 Slice,点击 Apply。 当然,这是简单且不完美的做法的做法。
更好的做法是,选择 Type 为 Grid By Cell Size,然后量体裁衣。但就这个素材,我已经量好了:
像素大小 X 94 Y 126
偏移 X 17 Y 6
填充 X 34 Y 0
大家直接用就行。
到这里,素材处理完了,我们还需要制作一下 TMP 可用的字体。
在 C:\Windows\Fonts 里有很多本机字体,我们可以直接使用。 再在网上找一个常用,就可以开始制作字体了。这里我们直说怎么最快的做出来,不加以详细阐释,大家感兴趣可以自行搜教程,或者我有空补写一个。
我的版本是 2021.3.12 这在最上面也能看得出来。
窗口 -> TextMeshPro -> Font Asset Creator
Source Font File 选择我们刚刚下载的字体,Character Set 选择 Characters from File,下方的 Characters File 选择你的字库, Atlas Resolution 选择 2048*2048 , padding 在 2-6左右, 然后点击 Generate Font Atlas 即可。
可以参考这篇文章:https://blog.csdn.net/qq_37454669/article/details/121128100
制作好字体,拖进你的Text一类的组件里的 Font Asset里,就可以使用了。
制作第一张卡牌-UI
终于做好前期准备了,来看UI吧。
这段看视频就好了,我就不写了(逃
制作第一张卡牌-逻辑
这边是有些要细说的点的
首先,我们新建一个 Card 脚本,把里面的东西都删掉,新建一个 Card 类。这个类我们放 Card 共有的一些属性,比如ID,Name,Description,Cost等等。还有卡牌可以发动的技能,我们也写上去。
1 | public class Card |
SpellType 这个属性,我们用来存储卡牌的技能。做成String[]是因为,一个卡牌可以有多个技能,比如一个卡牌可以是[攻击, 防御]
,也可以是[攻击, 防御, 治疗]
。同样,String也方便我们读表。
同样,一张卡也有不同的类型,比如怪兽卡,魔法卡,陷阱卡等等。我们可以用一个枚举来表示这些类型,也可以用子类,我这里没有使用枚举类型,并不是说枚举就不好,相反,枚举类型在某些时候更加高效,但是我这里用子类,是因为我想让大家看到子类的使用,同样,这里使用子类逻辑也会更清晰。如果我们未来卡牌种类有很多,使用子类也能避免枚举类型照顾太多属性的问题。
1 | public class MonsterCard : Card |
我们前面制作了卡牌的UI,那么我们也需要一个脚本来控制卡牌的展示逻辑。同样的,有时候我们在这里会使用一个静态的 UIManager 单例。但我像把他留在后面,所以这里我们就不用单例了。
1 | using UnityEngine; |
使用TMP一定要 using TMPro;
我们先声明一些 TextMeshProUGUI 然后在 Unity 里把他们拖进 CardDisplay.
同样,我们也需要声明一个 Card 类型的变量,用来存储我们的卡牌。在Start里,我们初始化一个卡牌,否则不方便演示, card也会变成一个野指针。这是我们要极力避免的。
随机我们开始编写 DisplayCard() 方法。这里的逻辑很好理解————就是’有的显示,没的隐藏’, 当然, 我后面使用 else 显然是不合时宜的,我后面会修改的。
1 | MonsterCard monsterCard = (MonsterCard)card; |
也可以写作
1 | MonsterCard monsterCard = card as MonsterCard; |
看起来会更优雅一点。
最好,不要忘记在Start()里面调用DisplayCard()方法,否则你的卡牌就不会显示了。
本文作于2023-08-12,首发于个人博客https://rdququ.top/