Wheel Collider を使って車両を作ろうと思い使ってみたが、何故か motorTorque にゼロ以外の値を入れて回した直後に地面にめり込んでしまう。
親子関係がない単独のホイールに至っては、そのまま地面をすり抜けて落っこちていく。
日本語でサイトを調べても、あまり具体的な使い方や解りやすい解説がないので困ってしまい、海外サイトを漁ってようやく最低限の使い方を理解した。
要点
- Wheel Collider を追加したオブジェクトの Rigidbody の「Freeze Rotation」には必ずチェックを入れる。
何故?
Wheel Collider を追加したオブジェクトを回転させてはならないから。というのも、Wheel Collider は下方向への当たり判定しか取っていない。
ホイールの衝突検出は、ローカルな Y 軸を通じて、Centerから下に光線を放つことで実行されます。
ホイールの衝突検知は center (中心)からローカル座標 Y 軸下向きに Raycast により行ないます。
...この説明で解った人に敬礼したい。自分はさっぱりだった。
要するに直感からは外れるのだが、 Wheel Collider 自体は「地面をすべるように」動くことが前提のようだ。
じゃあ、見かけ上は回転できないの?
これも、後で読み返したらヒントは書いてあったのだが...回転させてはならないってことを理解してから、初めて意味を察することができた。
ホイール コライダ オブジェクトを転動または回転させて、車両を制御しません。ホイール コライダが追加されたオブジェクトは常に車両自体に関連して固定される必要があります。 しかし、ホイールのグラフィック表示を回転および転動させたい場合があります。 これを行う最良の方法は、ホイール コライダと表示されているホイールに対して個々のオブジェクトを設定することです。
要するに「見かけ上回転する担当と、衝突や動き担当の2つのオブジェクトを作れ」ってことみたいで。
幸いこの WheelCollider はコライダとしては魔改造の部類で、色んなデータが取れるようになっているようなので、それで何とかなりそう。
上記サイトでも紹介されている GetGroundHit() を実装したりとか、簡易的なら rpm とかでも実装できるかも。