Menu
CoddyTech

速度

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 5/71。

rb.linearVelocityは、物体が現在どのように動いているかを表します。x、y、z方向の速度をメートル毎秒で示すVector3です。これを読み取ると物体がどちらへ向かっているかがわかり、rb.linearVelocity.magnitudeはその速さです。これを設定すると、加速時間も質量の影響もなく、動きがすぐに変わります。1 kgの箱も50 kgの金庫も、どちらも2 m/sに設定すれば、次の物理ステップから正確に2 m/sで動きます。その後も重力、摩擦、衝突の影響は受け続けます。

このゴーカートは正確にcruise m/sで前進します。速度をコピーしてzだけを変更し、元に戻すため、重力によって生じたyの速度は保たれ、ゴーカートは坂の端から落ちます。

void FixedUpdate()
{
    Vector3 vel = rb.linearVelocity;
    vel.z = cruise;            // 前方への速度をちょうど cruise m/s にする
    rb.linearVelocity = vel;   // y は重力による値を維持する
}

同時にyを0に設定すると、各ステップで重力によって生じた速度が失われ、ゴーカートは落下せず、坂からゆっくり滑り降りてしまいます。Unity 6より前は、このプロパティはvelocityという名前でした。古いチュートリアルでは今でもrb.velocityと書かれています。Unity 6ではコンパイルできますが、velocityは非推奨で、linearVelocityに名称変更されたという警告が表示されます。同様に、dragはlinearDampingになりました。新しい名前を使いましょう。

challenge icon

チャレンジ

簡単

ロボットを正確に speed m/s で歩かせ、端から落ちるようにします。

  1. FixedUpdate() で、float h = Input.GetAxisRaw("Horizontal"); と、"Vertical" から float v を読み取ります。
  2. 重力の y を維持したまま、rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed); を設定します。

「プレイ」を押して端から歩きます。キーを離すとロボットは止まり、落下します。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class RobotWalk : MonoBehaviour
{
    public float speed = 3f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // 矢印キーで、重力によるy方向の速度を維持しながら、正確にspeedの速さで移動する
    }
}

物理演算とゲームプレイのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド