本文使用開發(fā)平臺為Unity5.4台颠,編程語言為C#生兆。
貝賽爾曲線算法的原理:http://www.html-js.com/article/1628
GitHub地址:https://github.com/HaoHuaqing/EasyCarGame
因為課題需要泄隔,需要制作一個賽車小游戲薛躬。游戲內(nèi)容為:路程固定(準確的說是垂直方向距離一定)月劈,一條隨機彎曲的道路(貝塞爾曲線),玩家使用搖桿控制左右方向敞临,在道路上可以獲得較高速度,脫離道路后速度較慢麸澜,以盡可能快速到達終點為目的挺尿。
如果你安裝好了unity,從GitHub上下載程序后炊邦,在EasyCarGame\Assets目錄下運行CarGame.unity即可運行程序编矾。下面解釋一下程序的幾個關(guān)鍵點:
1.EasyCarGame\Assets\scenes目錄下會有car和grass的圖片,將一張car圖片和兩張grass圖片放入scene區(qū)域铣耘,小車自動向上運動洽沟,在草地上速度較慢,在道路上速度較快蜗细,cameracontrol.cs控制Main Camera追隨小車位置裆操,使小車保持在視野內(nèi);grasscontrol.cs控制草地從下方離開視野內(nèi)后自動調(diào)整位置到當前草地前方炉媒,使草地連續(xù)踪区。
2.新建一個空的游戲?qū)ο螅麨閟tartpoint吊骤。添加Sprite Renderer組件缎岗,設(shè)置sprite為button。將該點置于屏幕顯示范圍之外的下方白粉,作為貝塞爾曲線的起始點传泊。此后貝塞爾曲線上所有的相關(guān)點也是基于這個點生成的鼠渺。
3.基于startpoint復(fù)制了了98個游戲?qū)ο螅c與點之間垂直方向距離均為10眷细,每間隔一個點水平方向加入一個(-2,2)的隨機擾動使該點作為貝塞爾曲線控制點拦盹。所有奇數(shù)號點在同一條直線上。即一號點溪椎,二號點普舆,三號點構(gòu)成一條貝塞爾曲線;三號點校读,四號點沼侣,五號點構(gòu)成一條貝塞爾曲線,以此類推歉秫。在Bezier.cs中使用DrawCurve()函數(shù)將他們連接起來蛾洛。
4.游戲設(shè)計基于手柄,當然你可以嘗試用鍵盤方向鍵控制端考。使用Input.GetAxis("Horizontal")雅潭,獲取搖桿水平輸入,范圍在(-1,1)却特,因為畫面寬度為20扶供,所以將搖桿輸入乘以10。
5.將Bezier.cs中的pixel定義為static裂明,所以在carcontrol.cs中可以用Bezier.pixel訪問椿浓,用于確定小車是否在路上。在Bezier的Line Renderer中設(shè)置道路寬度為3闽晦,所以pixel+-1.5為道路邊界扳碍,在此范圍內(nèi)設(shè)置速度為0.4,其他位置速度降為0.1.在build之后的exe文件運行時仙蛉,Application.Quit()函數(shù)會調(diào)用笋敞,在unity環(huán)境下該函數(shù)會被忽略。