首页 理论教育贪食蛇游戏开发:功能实现、食物生成和蛇身移动

贪食蛇游戏开发:功能实现、食物生成和蛇身移动

【摘要】:贪食蛇游戏主要实现功能:WASD键或上下左右键控制蛇移动方向,吃到冰激凌加分,并且增长蛇身。图8-80食物开发图8-81“食物”卡住在Canvas下设置一个子物体FoodRoot,挂载脚本FoodCreator.cs。我们规定游戏开始,就生成一个食物,蛇每吃掉一个食物就随机生成其他食物,并有一定概率生成特殊奖励。将前一节的位置赋值给后一节,实现蛇身的移动图8-82蛇身移动在SnakeHead类中添加Move方法,使用List<Transform>记录蛇尾的位置信息。图8-83效果预览图8-84project列表

贪食蛇游戏主要实现功能:WASD键或上下左右键控制蛇移动方向,吃到冰激凌加分,并且增长蛇身。游戏提供两种蛇的样式可选,而且有两种有无边界模式可选。记录当前得分和历史最高分。

1)场景搭建

新建2D工程,新建StartScene场景,Game场景设置为1 280×720大小,导入资源。我们使用UGUI制作UI及人物,开始界面效果(见图8-74)。Canvas要设置为Screen Sapce Camera模式(见图8-75)。

图8-74 开始界面

图8-75 Canvas设置

需要注意的是,皮肤和模式分别只能二选一,Toggle Group的Allow Switch off不能勾选(见图8-76)。

新建主场景MainScene,效果如图8-77所示。因为需要开发一个边界模式,新建四个对象,放入场景四边,并添加碰撞体,勾选Is Trigger。

图8-76 皮肤和模式选择

注意:四面墙分别命名为Up、Down、Left、Right,新建一个父对象统一管理。

2)实现思路

图8-77 主场景

图8-78 实现思路

如图8-78所示有两种主要方式可以实现蛇的移动:第一种方式,从蛇尾的最后一节开始,依次向前一节蛇身的位置移动;第二种,蛇头每向前移动一个位置,就将蛇尾的最后一节移动到蛇头刚才的位置。我们选择第一种方式,因为蛇有两种颜色相间的蛇身,如果第二种方式,会让蛇身的颜色混乱。

3)开发蛇头

图8-79 蛇头

新建一个Image,命名为SnackHead,Source Image修改为蛇头图片,长宽设置为45×45,添加Rigidbody2D和BoxCollider2D组件,勾选Is Trigger,为其添加一个空的父物体Snack,方便管理蛇头和以后添加的蛇身(见图8-79)。

在SnakeHead上挂载脚本SnakeHead.cs。首先实现蛇头的移动、转头、空格键加速操作。实现主要思想,InvokeRepeating方法持续间隔一定时间调用控制蛇头移动的Move方法,然后Update方法监听按键,判断蛇头移动的XY增量。并实现蛇头转向,利用InvokeRepeating的间隔调用时间来控制蛇头移动的速度。需要注意根据实际情况设计蛇头移动步长Step的大小,最好能让蛇头在有限范围内移动整数步。

4)食物生成(www.chuimin.cn)

开发食物,新建一个Image,命名为SnackBody,source image设置为任意的食物图片,长宽设置为35×35,添加Box Collider2D,勾选is trigger,需要注意碰撞器大小设置稍微小一点,防止蛇头擦肩而过的时候,发生碰撞,标签设置为Food,最后设为预制体(见图8-80)。

设置步长step为30px,计算后得到世界坐标中心点到四周的步数,但为了防止出现食物“卡”在边缘(见图8-81),将步数各减一步。

图8-80 食物开发

图8-81 “食物”卡住

在Canvas下设置一个子物体FoodRoot,挂载脚本FoodCreator.cs。将FoodCreator设置为单例模式,只需实例化一次,方便调用。我们规定游戏开始,就生成一个食物,蛇每吃掉一个食物就随机生成其他食物,并有一定概率生成特殊奖励。特殊奖励的预制体和食物制作差不多。

5)处理蛇身的生成

蛇身SnakeBody的制作和前面类似,tag设置为Body,设为预制体。我们使用List<Transform>来存储蛇身,需要注意引用命名空间using System.Collections.Generic。在SnakeHead.cs中新增AddBody()方法,然后添加OnTriggerEnter2D()用于触发检测,当碰到食物或者奖励的时候,调用AddBody()方法,实现蛇吃食物增加蛇身的功能。

6)实现蛇移动

实现方法如图8-82所示。

将前一节的位置赋值给后一节,实现蛇身的移动

图8-82 蛇身移动

在SnakeHead类中添加Move方法,使用List<Transform>记录蛇尾的位置信息。

最终效果预览如图8-83所示。

图8-83 效果预览

图8-84 project列表