Menu
CoddyTech

速度

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

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

チャレンジ

簡単

ロボットは高くなったプラットフォームの上を歩きます。矢印キーで、x軸に沿って左右に、z軸に沿って前後に、raw axesを使って加速なしで正確にspeed m/s(Inspectorでは3)で歩かせましょう。

  • 矢印キーを押していないときは、すぐに静止します。
  • 重力は引き続き作用します。端から歩いて出ると、ロボットは下の地面に落ちます。

Playを押して端から歩かせ、次にCheckを押します。

自分で試してみよう

using UnityEngine;

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

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

    void FixedUpdate()
    {
        // 矢印キーでちょうどspeedの速さで移動し、重力によるy方向の速度を維持する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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