制作简单汽车游戏
?
unity3d論壇教程
1.現實中的車不是那么好漂移的,漂移需要輪胎與地面的低摩擦和良好的懸掛系統配合。
2.游戲里完全模擬力學引擎也是不現實的,因為漂移在現實中需要高超的技能,你不能指望玩家能有專業的技能水平去操控或者改裝你的車吧,萬一拐彎忘拉手剎,或者拉太久。而且完全的物理模擬,不僅費人腦去創意工業設計,也費電腦資源去運算。再說了,開發的不是微軟模擬飛行這樣的專業級模擬游戲。
3.在無數次失敗的代碼后發現,高速移動的賽車3d模型忽然間的轉彎是會側翻的,這個不是游戲引擎問題,我查了很多的汽車側翻事故,這個東西是客觀存在的,也就是說能漂移的汽車,需要有穩定精確的汽車架構,很低的底盤(我試過這個,但是在u3d里不管用,重心和底盤都快貼到地上了,依然高速運動下轉彎會側翻),專業級的懸掛系統(這很重要,這也是游戲里模擬不出來的),每個部件精確的調試,還有一大堆的汽車輔助系統(這個后面說)。
4.側翻不可避免,但游戲里不允許玩家稍微操控失誤就側翻,這會大大影響游戲性。我試過用加大重力的方法來防止側翻,但是加大重力也就加大了摩擦力,使用物理引擎去模擬漂移就更加的困難。
5.自動穩定桿系統(ASBS)能有效防止側翻,但是為了一款游戲有必要這么麻煩么?
經過幾天的研究,我研究出幾套漂移的解決方案(我開發采用的是最后一種,重點介紹最后一種)
方案一:整個賽車干脆都用translate做坐標移動,這個就是無視wheelcollider物理引擎的做法,新手適用,簡單方便,但之后的開發上會有很多問題需要解決(如果你想解決這些問題的話)。
方案二:用wheelcollider的懸掛設置和摩擦力設置做。這個應該是最標準的,但是我一直沒研究出來他的Forward Friction和Sideways Friction怎么設置,并且這些設置有什么效果(官方的賽車例子根本不會漂移)。當然這個做法的移動是使用wheelcollider的motorTorque做移動的。
方案三:輪子一樣還用wheelCollider,但汽車移動的動力不使用輪子的motorTorque,而是在汽車的rigidbody上施加Force來傳動(官方的例子是這樣的,這也是令我匪夷所思的,只能說明官方也知道他的wheelcollider引擎還有問題)。用Force有個好處,你可以在拐彎的時候做受力分析,計算出最后側滑的合力方向和大小,實時計算賽車動力方向和側滑判定。這個唯一的問題就是汽車穩定性問題,在高速運動的汽車中很難保證他的穩定,自己開發ASBS系統也不太可能吧。
方案四:這個是我的方法,用wheelcollider和translate混合處理。首先一點重要的,所有汽車移動,轉彎都必須使用wheelcollider提供的函數(至于為什么參看我關于wheelcollider的日志),用wheelcollider方法可以保證車子正常運動,但不會漂移(要么過快車速側翻,要么就直接轉彎過去了),判斷漂移只需要判斷玩家點擊手剎的時候,計算車子拉手剎一瞬間的轉彎角和慣性方向,使用transform.translate來實現甩尾,有效規避掉不必要的摩擦判斷和物理判斷。
由于手剎后前后輪抱死產生的摩擦和離心力的作用改變了整輛車合力的方向,所以導致汽車運動方向的改變,產生漂移。那我們假設他拉得不是手剎,而只是普通的制動閘,只有制動減速效果,所以先用wheelcollider做正常的拐彎減速運動,然后單獨寫一個traslate按預計漂移方向做物體移動,并判斷當手剎按鈕按下后再進行強行物體移動加以模擬減速移動來產生漂移的摩擦衰減效果(transform的坐標移動是不受物理引擎影響的,所以寫起來就很簡單。)
這樣最后綜合起來的效果就能產生漂移效果的最初框架了。玩家操作簡單,開發者開發也簡單,何樂而不為。最后剩下的工作就是要去慢慢調試一些數據來改變用戶體驗了。
轉載于:https://www.cnblogs.com/alps/p/5562348.html
總結
- 上一篇: MySQL MHA配置常见问题
- 下一篇: 嵌入式Linux裸机开发(六)——S5P