Unity的賽車游戲實現思路


unity目前版本實現賽車的技術方案主要有3種:

1、wheelCollider,設置motorTorque、brakeTorque、steerAngle來實現車子的推動和轉彎,優點是上手簡單,而且很快就能讓車子平穩的跑起來,也不會輕易翻車。缺點是這個模擬算法貌似還有點問題,在某些情況下會出現比較奇怪的現象。wheelCollider在與地面摩擦時,使用的是wheelCollider本身的摩擦屬性,與地面無關,若想在不同路面上有不同的速度效果,則需要動態改變輪胎的屬性。

2、AddForce,持續給車子AddForce,使車子跑起來。

3、手動設置車子的velocity,或者設置車子的位置,這種看似簡單,但是很難有賽車的感覺。

經過各種嘗試,最終選擇使用了wheelCollider實現。

 

考慮到物理碰撞的不確定性,我們把車子的模型和物理模型分開。這樣做的好處有兩點:一是在update里面,更新車子模型的位置信息,平滑的逼近物理模型,這樣更平滑一點;二是方便在某些時刻,讓車子模型單獨做一些動作或者其他改變。

車子的物理模型

 

CarTrigger最大,比車子模型還要大一圈,是一個BoxCollider,isTrigger為TRUE,不進行實際的物理碰撞反饋。主要用於提前檢測到碰撞,當撞到路邊或者是其他障礙,在OnTriggerXXX中可以做一些簡單的反彈、減速,而不進行真正的物理碰撞。那么問題來了,當物體速度太快時,因為沒有物理碰撞,車子就很可能會出現穿牆或者是卡在障礙里面的情況。

FrontCollider和BackCollider,非trigger,進行實際的物理碰撞,大大減少了車子穿牆的概率。

WheelCollider,控制車子的推力和拐彎。

有了這樣一個模型,然后在FixedUpdate,持續設置wheelCollider.maxTorque和steelAngle,車子就能跑起來了。

 

但是僅僅能跑起來了,除了漂移之類的操作,跟電腦上的賽車游戲有點像,但是離手機上的賽車游戲還有點距離。比如車子拐彎的時候,一旦撞到路邊,除了重置(無法倒車)就沒有其他辦法了,玩家的挫敗感比較強。現在手機上的賽車游戲,國內比較火的有我是車神、雪嶺雄風,這兩個游戲的共同點是玩家的操作不會改變車子的行駛方向,只會改變車子的賽道,就算不操作也基本能跑完全程,而不會卡死,是一個類跑酷的玩法,也比較符合手機操作的習慣。

所以接下來的工作就是研究可以轉彎的跑酷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM