重力と質量
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を設定しない限り、羽もレンガのように落下します。
チャレンジ
簡単2つの木箱をつるし、Spaceキーを押して同時に落とします。
Start()で、GetComponentの行の下に、rb.mass = weight;とrb.useGravity = false;を設定します。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プレイグラウンド