memomem

備忘録・メモ置き場

Unity WheelCollider 実装

Unity の WheelCollider で車(タイヤ)ごとに個別の重力を設定しようとすると正常に動作しない。(Physicsの設定で全体の重力を変更するのであれば問題なく動作する)

そのため、球面状を動く車体を作る場合にはカスタムの WheelCollider を使用する必要がある。

Github上のカスタムWheelColliderを記載する。

KSP で使用されているWheel

github.com

Unity 5 でのWheelCollider実装

github.com

pacejka での実装

github.com

シンプルなRaycastでのWheel

トルクやステアはタイヤに対してでは無く、車体に適応しているものが多い。

github.com

www.youtube.com

github.com

RaycastVehicle/RayCastVehicle.cs at master · mactinite/RaycastVehicle · GitHub

RaycastVehicle/RayCastWheel.cs at master · mactinite/RaycastVehicle · GitHub

タイヤの設置面を1点ではなく、円形として扱う方法

www.youtube.com

github.com

Slip

UnityのWheel Colliderについて

がっつりWheel Colliderを使ったことがある訳ではないので一部憶測も入っていますが、 公式マニュアルの下の方の解説を併せて参考程度にご覧ください。

タイヤのスリップしやすさ(グリップ力)は ・道路の摩擦(アスファルトより泥道や雪道の方がスリップしやすい) ・車の速度(徐行よりもF1レース中の方がスリップしやすい) に依存しますが、同じ環境(道路・速度)でもタイヤによってスリップする・しないがあります。 それを定めているのが挙げている設定項目です。

まず、スリップのしやすさを「スリップ値」とします。

アスファルトの上を車が真っ直ぐ走っているとします。 車の速度が上がる程スリップ値は上がっていきます。 スリップ値がExtremum Slipに達するとスリップが発生し、 この時タイヤと地面の接点に発生している力がExtremum Valueとなります。

一度タイヤがスリップすると、そこから発生する力は徐々に減り、やがて一定値になります。 (イメージ例:泥道でタイヤが回っているのに進まない状況は「力が0で一定」です) この「力が一定値になった時のスリップ値」がAsymptote Slip、「力」がAsymptote Valueです。

○○ Frictionはタイヤそのものの摩擦力です。 ゴムのタイヤと鉄のタイヤ(電車等)では摩擦力が異なりますのでそれを当てはめます。 この摩擦力が低い程、スリップ値が上がりやすくなります。

Stiffness Factorは摩擦力を任意で変化させるためのものです。 例えば「バナナの皮を踏んだ!」という場合、この値を変化させるだけで摩擦力を低下させることが出来ます。

最後に、ForwardとSidewaysが別々に用意されているのは、多くのタイヤでは「前転する時(=直進時)」と「横方向の力が加わった時(=カーブ時)」では摩擦力(グリップ力)が異なるからです。 これは実際のタイヤのカタログでも見てもらえると分かりやすいのですが、 「前後方向へのグリップは強いが横スリップはしやすいタイヤ」「前後方向へのグリップは弱いが横スリップしにくいタイヤ」などのバリエーションが存在します。