#はじめに
本記事はよく使用するものをピックアップした、初心者向けのRigidbodyの簡易説明書になります。
個人的なメモの意味合いが強いので、もっと詳しく知りたいという方は公式リファレンスへどうぞ。
下記に記載のないものは今後、別で記事を書く予定。
#Rigidbodyとは
公式マニュアルでは以下のように記載。
Rigidbody を使うと、ゲームオブジェクト を物理特性によって制御する事ができるようになります。リジッドボディに力やトルクを加えると、オブジェクトをリアリスティックに動かすことができます。重力の影響を加えたり、スクリプトを使って力を与えたり、NVIDIA PhysX 物理エンジンを通して他のオブジェクトと相互作用させるためには、ゲームオブジェクトにリジッドボディを加える必要があります。
#Properties
###mass
物体の質量。オブジェクトのイメージに沿って設定する(鉄球だったら20,羽だったら0.01のように)。重いものが速く落ちると思ってるなら、大きな間違いなので気をつけよう。
###drag
物体の抵抗。数値をあげれば抵抗があがり、物体は遅くなる。こいつを調整することで、水の中などを表現することができる。
###angularDrag
物体の回転抵抗。回転抵抗などがわからない場合はdragの回転バージョンくらいで覚えておこう。歯車など回転を遅くしたい場合に有効。
###useGravity
重力の有無を設定できる。宇宙空間などを表現したい場合はfalseにする。
###isKinematic
物理的挙動をするかどうか。trueにすると物理挙動をしなくなる。それならrigidbodyそのものを使用しなければいいと思われがちだが、急に動かなくなる人形のようなオブジェクトを作成したい時に便利。
###interpolation
動作の補間機能。Update()が呼ばれるタイミングと、物理演算を行うFixedUpdate()が呼ばれるタイミングは必ずしも一致しないため動きがカクついてしまう。Interpolateは直前フレームの速度を使って計算。Extrapolateは現在の速度から次フレームの位置を予測して補間を行う。計算処理が重いので、カメラで追従するメインキャラクターのみ設定するのが吉。
###constraints
任意の軸での移動、及び回転を制御することができる。3D空間だけど2D的な挙動を期待する時に使用できる。
#Public Methods
有用なメソッドばかりだが、簡易リファレンスなので基本的なものを記す。
###AddForce(Vector3 force, ForceMode mode)
力を加えるメソッド。forceで力のベクトルを指定する。
以下でForceModeについて解説。
ForceModeの種類
4つのモードがあります。
● Force
物理法則に近い挙動。
a = F/m(加速度 = 力/質量)
で計算する。
徐々に力を加えて加速していく物体に使用すると良い。ForceModeを指定しない場合のデフォルト。
● Acceleration
上記Forceの質量無視バージョン。
a = F(加速度 = 力)
になるので、どんな重さでも徐々に加速して欲しい時に使用。
● Impulse
加速を無視した瞬発的な力。
v = F/m(速度 = 力/質量)
で計算。一発のみ力が発生する時に使用。個人的にはゲームと一番相性が良いと思っている。
● VelocityChange
上記Impulseの質量無視バージョン。
v = F(速度 = 力)
になるので、質量関係なく吹き飛ばしたい時などに使用。
###AddTorqueVector3 torque, ForceMode mode)
物体にトルクを加える。トルクがわからない方はこちらへどうぞ。
物理的に回転して欲しい時に使用。
###MovePosition(Vector3 position)
物体の位置を座標的に動かす。rigidbody使用オブジェクトで物理挙動関係なく移動させたい場合は、transform.positionよりMovePositionの方が軽い。
###MoveRotation(Quaternion rot)
物体の回転を行う。MovePositionの回転版。
#まとめ
メモと最初に言ったが、流石に忘れないレベルの内容になってしまった。
公式リファレンスはゴチャゴチャしてて見にくいよーという初心者の方が、導入として見てくれたら幸いです。