本文使用开发平台为Unity5.4,编程语言为C#。
贝赛尔曲线算法的原理:http://www.html-js.com/article/1628
GitHub地址:https://github.com/HaoHuaqing/EasyCarGame
因为课题需要,需要制作一个赛车小游戏。游戏内容为:路程固定(准确的说是垂直方向距离一定),一条随机弯曲的道路(贝塞尔曲线),玩家使用摇杆控制左右方向,在道路上可以获得较高速度,脱离道路后速度较慢,以尽可能快速到达终点为目的。
如果你安装好了unity,从GitHub上下载程序后,在EasyCarGame\Assets目录下运行CarGame.unity即可运行程序。下面解释一下程序的几个关键点:
1.EasyCarGame\Assets\scenes目录下会有car和grass的图片,将一张car图片和两张grass图片放入scene区域,小车自动向上运动,在草地上速度较慢,在道路上速度较快,cameracontrol.cs控制Main Camera追随小车位置,使小车保持在视野内;grasscontrol.cs控制草地从下方离开视野内后自动调整位置到当前草地前方,使草地连续。
2.新建一个空的游戏对象,命名为startpoint。添加Sprite Renderer组件,设置sprite为button。将该点置于屏幕显示范围之外的下方,作为贝塞尔曲线的起始点。此后贝塞尔曲线上所有的相关点也是基于这个点生成的。
3.基于startpoint复制了了98个游戏对象,点与点之间垂直方向距离均为10,每间隔一个点水平方向加入一个(-2,2)的随机扰动使该点作为贝塞尔曲线控制点。所有奇数号点在同一条直线上。即一号点,二号点,三号点构成一条贝塞尔曲线;三号点,四号点,五号点构成一条贝塞尔曲线,以此类推。在Bezier.cs中使用DrawCurve()函数将他们连接起来。
4.游戏设计基于手柄,当然你可以尝试用键盘方向键控制。使用Input.GetAxis("Horizontal"),获取摇杆水平输入,范围在(-1,1),因为画面宽度为20,所以将摇杆输入乘以10。
5.将Bezier.cs中的pixel定义为static,所以在carcontrol.cs中可以用Bezier.pixel访问,用于确定小车是否在路上。在Bezier的Line Renderer中设置道路宽度为3,所以pixel+-1.5为道路边界,在此范围内设置速度为0.4,其他位置速度降为0.1.在build之后的exe文件运行时,Application.Quit()函数会调用,在unity环境下该函数会被忽略。