いんでぃーづ

ゲームメインのブレブレブログ。ゲーム,Unity,デザイン,UI/UX

Unity : WheelColliderを初めて使うときにつまずくこと3つ

私は車の運転が苦手です。
だからせめてゲームの中では得意でいたい。
あわよくば峠を攻めたい...

そしてUnityでWheelColliderを使うことをふと思い立ちました。嘘です。

使ってみたらつまづいたことをメモ。

コライダーが見えない

まずはタイヤだけでテストしてみたいですね。

シーンに円柱を配置してWheelColliderをアタッチしてみましょう。

f:id:sugar_affordance:20160520094044p:plain

f:id:sugar_affordance:20160520094039p:plain

...あれ?

f:id:sugar_affordance:20160520094042p:plain

ん?

コライダー見えないよ?
Unityのマニュアルでは、円形の緑色の線が見えるはずです。

http://docs.unity3d.com/ja/current/Manual/class-WheelCollider.html

ほんとにコライダー付いてるんでしょうか。

解:Rigidbody を付ける

ホイールコライダーを持っているオブジェクト、もしくはその親オブジェクトのいずれかに対してRigidbodyをアタッチすれば、シーンにコライダーの緑線が表示されます。
WheelColliderはRigidbodyとセットで使うというのが前提なのでしょう

他のコライダーはRigidbodyなくても使えますけどね。

むっちゃはずむ

こんな感じのオブジェクト構造にしました。

f:id:sugar_affordance:20160520094140p:plain

Cubeがルートオブジェクトで、Rigidbodyがついています。WheelはWheelColliderがついている円柱オブジェクトです。

これでバッチリっしょ!再生!

f:id:sugar_affordance:20160520094047g:plain

...お、おう

飛んだね

解:重くする

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!

f:id:sugar_affordance:20160520094145g:plain

...タンク

解: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 により制御できます。

結論

マニュアルはちゃんと読みましょう


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。