![游戏设计与开发:Unity实战完全自学教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/6/43738006/b_43738006.jpg)
3.4.4 不同糖果删除效果的设计与实现
由前文的糖果数据结构设计可知,糖果有不同的颜色和类型,不同糖果有不同的删除效果,该游戏中一共有五种不同类型的糖果,其删除效果如下。
1.普通糖果
删除普通糖果时没有附带的效果,直接删除即可。
2.纵向删除糖果
删除纵向删除糖果时,需要将与该糖果同一列的糖果全部删除,假设如图 3-14 所示圆形的位置是一个纵向删除糖果。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_73_2.jpg?sign=1739595003-gNfVlS8eBd7oRt5TcvbnysgijxmiON5P-0-133082300033921c6227830c4b2b5fc3)
图3-14
将图 3-14 中的糖果删除时,需要同时删除这一列所有的糖果,纵向删除糖果的删除效果如图3-15所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_74_1.jpg?sign=1739595003-dCH4hyByrfNWWXVEP4Dhdk9Md7mUR99l-0-64a34bb529451130e60d22fe66f8979f)
图3-15
在该游戏中,除了普通糖果,删除其他类型的糖果都要制作出单独的删除效果,以方便在不同的地方复用。实现纵向删除糖果的删除效果非常简单,需要输入需要删除的列号,再将整个列的坐标都放入等待删除列表,具体代码如下。
代码位置:见源代码目录下Assets\Scripts\GameManager.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_74_2.jpg?sign=1739595003-RCbNBp1x9fOKhpT5yxl2ROrmyaBtwbSg-0-36d9b3d8d3953e12fe341908860671da)
3.横向删除糖果
删除横向删除糖果和删除纵向删除糖果是相对的,需要将与该糖果同一行的糖果全部删除,假设同样在图3-14所示的位置删除一个横向删除糖果,那么横向删除糖果的删除效果如图3-16所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_75_1.jpg?sign=1739595003-lCof1JLqby07lFiSsQhkQwzo2YwASPlY-0-4b22108a65865611db20b444085bf336)
图3-16
实现横向删除糖果的删除效果也和实现纵向删除糖果的删除效果相似,因为实际上只是行列上的差异,操作思路是一样的。具体代码如下。
代码位置:见源代码目录下Assets\Scripts\GameManager.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_75_2.jpg?sign=1739595003-UVZPCGuq8a1Zs9UXlJs6ZsWcAJ8DF9cJ-0-5fe43ef11584a42854718840fc54e7e3)
4.菱形删除糖果
删除菱形删除糖果需要以该糖果为中心,把以某个数值为半径的菱形区域内所有的糖果删除。在如图3-14所示的位置删除一个菱形删除糖果,将其半径假设为2,菱形删除糖果的删除效果如图3-17所示。
删除菱形删除糖果相对来说复杂一点,需要一个中心坐标和一个半径值,这里将坐标拆分为两个int类型的数值,半径也是int类型的数值。通过将菱形分为三个部分处理,找到该菱形对应的所有坐标,将其放入等待删除列表中。这三个部分的划分如图3-18所示。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_76_1.jpg?sign=1739595003-PUNsJynoRy3RSYcYEqgAMWsDqIANwBor-0-ac0a7e2577d73bc8c013be7fa59ecfaa)
图3-17
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_76_2.jpg?sign=1739595003-MLgSuHvuDrh3OACZLl0st6Jy5PuDUTwm-0-d1b1537c3ece19239a66e74a45852a94)
图3-18
具体代码如下。
代码位置:见源代码目录下Assets\Scripts\GameManager.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_76_3.jpg?sign=1739595003-yToFgbniI1zOWmJVteB9KjmCH8CmXycz-0-12339380d14cc85e27d23dabc0a8d304)
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_77_1.jpg?sign=1739595003-C4WqK2XqLZGtrGqEAX2nWUs2xlFxGjzX-0-0f8d0193dff7358cd221522324d85e64)
5.全部删除糖果
全部删除糖果是一个很特殊的糖果,在“三消”游戏中由玩家操作直接触发的删除,一般是通过交换两个特殊糖果才能产生。而全部删除糖果即便与普通糖果交换,也会有特殊删除效果产生,特殊糖果交换的效果会在后文细说,这里先描述全部删除糖果的删除效果。
该删除效果适用于玩家将全部删除糖果与普通糖果交换的情况,也适用于系统删除糖果时触发全部删除糖果的情况。由于是系统删除,而非玩家操作,所以没有指向某个颜色的糖果,需要在调用时随机指定一个颜色值并传入代码中,具体代码如下。
代码位置:见源代码目录下Assets\Scripts\GameManager.cs。
![](https://epubservercos.yuewen.com/9A2E4E/23020637701641706/epubprivate/OEBPS/Images/42155_77_2.jpg?sign=1739595003-OzIk9wd0P2Exo197Z6rO7Lu91ynYmZDc-0-53d8e2cec6948b727a10bf0f7ae52a64)
至此,删除不同糖果的效果设计与实现介绍完毕,以上代码省略了部分声明字段和对字段赋值的代码,如有需要,请读者自行翻阅本实例的源代码。