虚幻4实战 贪吃蛇制作

来源:互联网 发布:隐藏文件夹恢复软件 编辑:程序博客网 时间:2024/04/30 11:45

之前利用unity做过贪吃蛇,从思路、代码逻辑上来说,并没有什么难度。今天早上在公司就完成了,这里记录下。
效果图就是下面这样的。最后我按了与运动方向相反的按钮,这里我设置这样的操作也是死亡的。
这里写图片描述

一、 前期设置
贪吃蛇是2d游戏,没有玩家(pawn和character),所以这里要进行一些设置。
首先,把GameMode、PlayerController都替换掉,自己写MyMode和Mycontroller,在世界设置里,这里就不多说了,default pawn class选为none。
然后再向场景中拖入一个camera,作为游戏界面。为了实现2d效果,camera选为正交模式,如下。然后调整camera大小和方向即可。
这里写图片描述
场景大概这样就好了,蛇就在下面的面板上运动。
这里写图片描述
在关卡蓝图写如下代码,实现摄像机内容输出到屏幕。
这里写图片描述

二、蓝图类设置
需要设置head、snakepart、food三个类蓝图。head作为上面的黄色头部,snakepart是黄色头部后面跟随的身体,food是随机出现的食物。
head类蓝图设置如下,主要判断碰到food、碰到snakepart事件。head的控制写在playercontroller里。
这里写图片描述
snakepart、food蓝图不用写任何东西。
关于以上三个类蓝图actor的设置,大小、材质的这里不在赘述,自己多试试就好了。

三、Mycontroller蓝图
基本游戏的所有逻辑都在这里了。

首先是控制head的转向。这段逻辑相对独立,可以测试好再进行下面的工作。
这里写图片描述

然后tick事件,这里控制着整个游戏的流程。
这里写图片描述
简单的说下逻辑顺序吧。
delay是确保蛇的移动是跳跃式的,每隔moverate秒后蛇一次性移动蛇身体长度的位置。
然后UpdatePosition事件,储存当前head和所有snakepart的位置信息。
MoveHead事件,head移动到下一个位置。
AddBody事件,检测是否吃到food,是否要增加snakepart。
MoveBody事件,最后更新所有snakepart到新的位置,实现蛇身的移动。

UpdatePosition事件:
这里写图片描述
将head和所有snakepart位置信息储存到allposition数组。

MoveHead事件:
这里写图片描述
这里代码虽然不多,却是最重要的部分。原理就是不断给head增加世界位置偏移量,偏移量的方向是actor forward vector,大小move length是head的长度。

AddBody事件:
这里写图片描述
如果eatfood就spawn actor,增加身体snakepart,位置就是position数组的最后一个,并且在随机生成一个food(spawn food事件)。
spawn food事件:
这里写图片描述
随机在box内生成一个food即可。这里还有一个box蓝图类,继承自actor。关于这个的具体设置不在详细说了。

MoveBody事件:
这里写图片描述
这里也是重要逻辑。第一个位置的snakepart移动到蛇头位置,后面的每个snakepart移动到前一个snakepart的位置,而恰好我们的allposition数组就是这样按顺序储存了所有的位置信息,所以直接foreach语句即可。

最后的dead事件:
这里写图片描述
何时调用dead事件请拉回顶部….
至于这里的ui制作就不多说了,实在太简单了。

四、不足之处

这个游戏到这里已经算完美运行了,根据我长达一个小时的试玩,应该是没什么bug了。

不过,改善之处还是有不少地方的。
首先,food随机出现的位置不太理想。我们已经设置好蛇是跳跃式的移动,一格格的运动,但是我们的food却出现在了不是格子的地方。。。所以蛇头有时候只是与food擦肩而过。。。
然后,这里边界的死亡条件没有加入,这个算是比较简单了。

1 0
原创粉丝点击