一般的なルールとして、もしゲームの中で
移動するゲームオブジェクトを使用する場合
Rigidbody オブジェクトとする
べきです。
Rigidbody は ゲームオブジェクトが物理挙動（Physics）により
影響を受けるためのコンポーネントです。
オブジェクトが重力により落下し、
重量（Mass）、抵抗（Drag）、速度（velocity）
などといった物理挙動のプロパティをもちます。
Rigidbody コンポーネントをゲームオブジェクトに
追加すると、そのオブジェクトを Rigidbody オブジェクトと
呼ぶことがよくあります。
Rigidbody コンポーネントはあらゆる物理挙動の伴う相互作用に
必要であり、ゲームオブジェクトは
コライダをアタッチしないと
他の物理挙動のあるオブジェクトと相互作用できません。
Rigidbody がないと powerCube
は宙に浮いたままです。
しかし、Rigidbody を追加したときに何が起きるかみてみます。
他のコンポーネントと同様に
インスペクタの最下部にある Add Component ボタンを使用するか
トップメニューの
Component メニューを使用します。
Physics セクションの配下でみつけることが出来ます。
これでゲームオブジェクトは重力により落下し、
物理エンジンおよび加えられた力により
制御されます。
Rigidbody にはさまざまなオプションがあります。
最初にゲームオブジェクトの Mass
Drag, Angular Drag が制御できます。
オブジェクトの Mass により
オブジェクトの衝突の処理方法に影響します。
Mass の大きいゲームオブジェクトほど
Mass の小さいゲームオブジェクトと衝突したときに
小さな作用をします。
ゲームオブジェクトの Drag は
他の作用がない場合にどれぐらい早く減速するかに
影響します。
空気抵抗と考えると良いです。
これは線形の速度の減少割合を決めるのに
使用されます。
同様にして、Angular Drag はゲームオブジェクトがいかに
Angular Velocity、すなわち
どれぐらい早く回転速度を減速するかにも
影響します。
例えば、もしオブジェクトにトルクを加えて
回転させる場合、
Angular Drag はこの力に抵抗を
作ります。次のオプションは
ゲームオブジェクトが重力（Gravity）により影響を受けるかどうか
です。
このチェックボックスを有効にすることにより重力を使用します。
重力の設定については
Unity の Edit - Project Settings - Physics メニューにてみることができます。
みてのとおり 3 次元のベクトルであり
デフォルトでは現実世界と同様
-9.81 という値です。
ここでグローバルにカスタマイズすることが出来るため
興味深いエフェクトを作ることが出来ます。
例えば横スクロールゲームでの弱い重力とか
パズルゲームの一部として
様々な軸として使用することさえ出来ます。
例えば、 Z 軸に 5 という値を
重力に加えてみましょう。
これで powerCubet はグローバル空間座標での Z 軸に
向かって引っ張られます。
Is Kinematic オプションにより
Rigidbody が物理挙動に対して反応するか決定します。
通常、シーンが開始するときすべての static な物体、
つまり、Rigidbody のないオブジェクトは
物理エンジンによりチェックされ
パフォーマンスのためそれ以降はチェックされません。
しかし、もし static オブジェクトを移動した場合
物理エンジンは再度すべての static オブジェクトを
正確性の観点で再チェックを行い、
これはパフォーマンスにとって負荷となります。
これを回避するため、 Kinematic Rigidiby オブジェクトを使用して
その Transform を通して
Translate 関数を使用して移動させることが出来ます。
これはつまり Physics オブジェクトについて
他にオブジェクトに影響するけれども自身には影響しないものを作成することが出来ます。
分かりやすい例は
Pong または Breakout といったスタイルのゲーム（※アルカノイドのような）でのパドルがあります。
このサンプルでは Rigidbody powerCube は
Use Gravity オプションがチェックされています。
Play ボタンを押下すると、オブジェクトは地面に落下します。
さらに丸い prop_samoflange Ball オブジェクトがあり、同様のコンポーネント設定を
となっています。
もし powerCube に重力がない場合
その下に落ちませんが、
他のオブジェクトにより影響されます。
もし他のオブジェクトにより影響されたくない場合
Is Kinematic を使用することができます。
前述のとおり オブジェクトはその Transform を通して
動かすことが出来ます。このシンプルなスクリプトを
使用して Tranlate 関数を使用して
毎フレームごとに
forward 方向に移動できます。
みてのとおり、オブジェクトは
他のオブジェクトと相互作用しますが
Rigidbody のままであるため、
物理エンジンに現在位置を伝えて
物理エンジンが
シーン全体を再評価しないようにします。
Interpolate および Extrapolate は
揺らぎ（Jitter）を回避します。
もしオブジェクトのわずかな動きが
Rigidbody により動かす時に発生する場合
Interpolate 設定を使用することで
前フレームにもとづいた Transform 動作のスムージングを
行ないます。そして Extrapolate 設定により
次フレームの位置予測にもとづいた
スムージングを行ないます。
次の設定は
衝突判定（Collision Detection）のタイプです。
Discrete, Continuous, および Continuous Dynamic があります。
デフォルトは Discrete であり、
問題ないかぎり Discrete を使用するべきです。
Continuous は高速のオブジェクトで
static な物体と相互作用がある場合に使用します。
Continous Dynamic は高速なオブジェクトで
他の Dynamic オブジェクトと相互作用がある場合に
使用します。
最後に Rigidbody コンポーネントの Constraints セクションにより
オブジェクトの動作または回転の
物理挙動を制限させることが
できます。例えば、
もしテトリスのようなゲームがあった場合
ゲームのブロックが落下するときに
回転させる必要があります。
ここの Rotation Constraints を使用することで制限すべきです。
このサンプルでは powerCube は
workbench 上に落下します。これは Rigidbody であり
Use Gravity が有効化されています。
標準どおり、次のように落下します。
もし落下するについれて回転させたくない場合
Constraints のなかで回転をフリーズすることが出来ます。
これで落ちるときに回転が発生しません。 (翻訳:gamesonytablet)