Unityでゲームを作っていると、ゲームにリアルな挙動の車を登場させたくなることがあります。そんなときに便利なのが「Wheel Collider」という特殊なコライダーで、これを使えばかなりリアルな動きをする車を実現することが可能です。
しかし、このWheel Colliderは非常に癖が強いコライダーなので、「使い方がよく分からん!」という方も多いのではないでしょうか?
そこでここではWheel Colliderの基本的な使い方を解説していきますね。
Wheel Colliderとは?
ではまずWheel Colliderについて簡単に説明しておきます。
Wheel Colliderはその名の通り「車の車輪」の挙動をシミュレーションできる特殊なコライダーです。具体的にどの辺が特殊かというと、
- コライダーという名前が付いているが、それ自体に物理的な動きをする機能がある
- 摩擦やサスペンションに関する設定項目がある
といった部分が他の汎用的なコライダーと大きく異なります。まあ読んで字のごとく車輪のシミュレーションに特化したコライダーというわけですね。
ちなみにWheel Colliderコンポーネントには下の画像のような設定項目があります。
各項目についてはUnity公式マニュアルをご覧ください。ただし基本的にはデフォルト設定で問題ないと思います。
Wheel Colliderの使い方
次にWheel Colliderの基本的な使い方について説明していきます。
アクセル・ブレーキなどの挙動を制御する方法
Wheel Colliderはそのままではバネがついた円形のコライダーなのですが、C#スクリプトを使えばアクセル・ブレーキなどの力を加えたり、ステアリング角度などを制御したりすることが可能です。
※以下の例では、予めWheelColliderコンポーネントを変数「wheel」にキャッシュしてあるものとして説明します。
アクセル
まずアクセルによる力を加えたい場合は、motorTorque変数にトルク(単位はN・m)を代入すればOKです。
wheel.motorTorque = 3000;
ブレーキ
次にブレーキについてはbrakeTorque変数にトルクを代入します。
wheel.brakeTorque = 10000;
基本的にアクセルよりも大きなトルクを加えるようにしましょう。
ステアリング角度
最後にステアリング角度についてはsteerAngle変数に角度を代入します。
wheel.steerAngle = 30;
車輪のメッシュをWheel Colliderに追従させる方法
さて基本的な使い方はこんなところですが、ついでにこのコライダーでハマりやすい点について説明しておこうと思います。
このWheel Colliderで一番つまづきやすい点は、なんと言っても「車輪のメッシュの回転」でしょう。Wheel Colliderはあくまでもコライダーなので、他のゲームオブジェクト同様に車輪のメッシュは別途用意する必要があるのですが…普通にメッシュをWheel Colliderの子にしてもそのメッシュはコライダーに追従してくれません(※もしかしたらコライダーなのでTransformはいじらない、という設計なのかもしれません)。
じゃあどうすれば良いのかといえば、Wheel Colliderに「GetWorldPose」という関数があるのでそれを使いましょう。サンプルコードは次の通りです。
Quaternion quat; Vector3 position; wheel.GetWorldPose(out position, out quat); wheelMesh.transform.position = position; wheelMesh.transform.rotation = quat;
こうすればコライダーの通りに車輪のメッシュが動くようになります。
おわりに
以上、簡単ではありますがWheel Colliderの基本的な使い方をご紹介しました。
まあ実際にリアルな車を作るためには他にも細かくて面倒くさい制御をする必要があるのですが、Wheel Colliderだけでもかなり良い感じの動きになるので興味があればぜひ使ってみて頂ければと思います。
この記事がUnityでのゲーム制作のお役に立てば幸いです。