Menu
CoddyTech

重力と質量

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

Rigidbodyを追加すると、Add a Componentで追加したときと同じように、オブジェクトはUnityの物理演算に委ねられます。それ以降、重力によってオブジェクトは毎秒9.81 m/sずつ加速し、Rigidbodyにはその動作を決める設定があります。そのうちの2つが、キログラム単位のmass(新しいRigidbodyでは1)と、useGravity(新しいRigidbodyではオン)です。

質量によって物体の落下速度が変わることはありません。重い物体にはより強い重力が働きますが、加速しにくさも同じだけ大きいため、同じ高さから落とした1 kgの木箱と50 kgの金床は、同じフレームで着地します。質量が重要になるのは、物体同士が押し合うときです。金床は木箱を押しのけますが、木箱は金床をほとんど動かせません。このパーティー用の風船は質量が軽く、重力の影響を受けないようにするため、シーンに配置された場所に浮かび続けます。

void Start()
{
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.mass = 0.2f;
    rb.useGravity = false;
}

useGravityをオフにしても、風船の質量はそのままで、何かにぶつかれば動きます。止まるのは重力による引力だけです。trueに戻すと、オブジェクトがいる場所から再び重力が働きます。Unityの物理演算には空気もないため、RigidbodyにLinear Dampingを設定しない限り、羽もレンガのように落下します。

challenge icon

チャレンジ

簡単

2つの木箱をつるし、Spaceキーを押して同時に落とします。

  1. Start()で、GetComponentの行の下に、rb.mass = weight;とrb.useGravity = false;を設定します。
  2. Update()で、Input.GetKeyDown(KeyCode.Space)のときに、rb.useGravity = true;を設定します。

「プレイ」を押してSpaceキーを押します。重い金庫と軽い箱が一緒に着地します。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class CraneLoad : MonoBehaviour
{
    public float weight = 1f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // 質量をweightに設定し、重力が働かないようにする
    }

    void Update()
    {
        // Space: 再び重力が働くようにする
    }
}

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

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