私は車の運転が苦手です。
だからせめてゲームの中では得意でいたい。
あわよくば峠を攻めたい...
そしてUnityでWheelColliderを使うことをふと思い立ちました。嘘です。
使ってみたらつまづいたことをメモ。
コライダーが見えない
まずはタイヤだけでテストしてみたいですね。
シーンに円柱を配置してWheelColliderをアタッチしてみましょう。


...あれ?

ん?
コライダー見えないよ?
Unityのマニュアルでは、円形の緑色の線が見えるはずです。
http://docs.unity3d.com/ja/current/Manual/class-WheelCollider.html
ほんとにコライダー付いてるんでしょうか。
解:Rigidbody を付ける
ホイールコライダーを持っているオブジェクト、もしくはその親オブジェクトのいずれかに対してRigidbodyをアタッチすれば、シーンにコライダーの緑線が表示されます。
WheelColliderはRigidbodyとセットで使うというのが前提なのでしょう
他のコライダーはRigidbodyなくても使えますけどね。
むっちゃはずむ
こんな感じのオブジェクト構造にしました。

Cubeがルートオブジェクトで、Rigidbodyがついています。WheelはWheelColliderがついている円柱オブジェクトです。
これでバッチリっしょ!再生!

...お、おう
飛んだね
解:重くする
WheelColliderのサスペンション(バネ)の跳ね返りが強すぎて飛んでしまうようです。
Rigidbodyのmassの値を増やして、車体を重くしましょう。
WheelColliderのSuspension関係の値をいじるのはやめたほうがいいでしょう。タイヤ4つ使うなら4つ分の値をいじる必要がありますし、言うても車ですから。重いですよね普通。
1000くらいにすればいいと思います。
まあ私車ぜんぜん詳しくないので、あとは友達の整備士にでも聞いてください。
タイヤ回転させてるのに動かない
コライダーはつけた。
車体は安定した。
あとはタイヤを回せば動くはず!
ということでスクリプトをアタッチしてみましょう。
Rigidbogy関係の処理だからFixedUpdateに書けばいいかな?
Meshの方向と合わせて、X軸にそって回転させればいいよね!
public class Wheel : MonoBehaviour {
void Start () {
}
void FixedUpdate () {
transform.Rotate (
Vector3.right,
100 * Time.fixedDeltaTime
);
}
}
再生GOGO!

...タンク?
解:WheelColliderのプロパティをいじる
WheelColliderのmotorTorqueプロパティを設定することで前進できます。
決してオブジェクト自体を回転させてはいけません。
using UnityEngine;
using System.Collections;
public class Wheel : MonoBehaviour {
void Start () {
GetComponent<WheelCollider> ().motorTorque = 50;
}
void FixedUpdate () {
}
}
マニュアルに書いてありました。
http://docs.unity3d.com/ja/current/ScriptReference/WheelCollider.html
ホイールは motorTorque、brakeTorque および steerAngle により制御できます。
結論
マニュアルはちゃんと読みましょう