Component_01

Last-modified: 2023-07-06 (木) 19:33:53

GetComponent

Startメソッドの中に、以下のコードを記述する。※以下はRigidbodyの場合。

private Rigidbody rb = GetComponent<Rigidbody>();
  • 上記の処理を書くことで、Rigidbodyをスクリプト側から、いじれるようになる。
 

Rigidbody

オブジェクトに重力を付加する。このとき、子オブジェクトと一体化された状態で物理演算が入る。Rigidbody 型の変数が扱えるようになる。
物理演算はとにかく重いので、物理演算には物演算をぶつけるという対処法を採ることがある。(物理演算は周囲の環境が変わるたびに、影響が挙動に関係が無い、または影響がない数値まで、いちいち計算しなおす必要があるため)


インスペクターの詳細は以下の通り。

  • Mass:落下スピード。
  • Drag:直線に移動する際などの空気抵抗。
  • Angular Drag:回転する際の空気抵抗。
  • Use Gravity:チェックを入れることで落下する(重力の影響を受ける)。横方向だけに動かしたい(落下はしてほしくない)場合などはチェックを外すこと。
  • IsKinematic:チェックを入れると、物理演算の影響を受けなくなる。デフォルトではチェックが外されていて、物理演算の影響を受けることになっている。Ridigbody を使用しているときは原則として(挙動が重くなるため) Transform は併用しないが、通常の重力ではありえない動きをスクリプト側で指定するときや、当たり判定のみが使いたいとき、Rigidbody 型の変数のみが使いたいときなどにチェックを入れる。最初のうちは気にしなくていい。
  • Interpolate:移動の補完方法を選択できる。たとえば、A地点にいるオブジェクトがB地点に移動する際、None ならAからBへの瞬間移動、Extrapolate や Interpolate ならA地点からB地点に向かう途中を1FPSごとに計算してくれる。Extrapolate は未来予測なのに対し、Interpolate は計算をしたあとに画面上に表示することで、動作は重くなるが確実な描写が可能となる。なお、None だとカクカクしがち。最初のうちは気にしなくていい。オブジェクトの挙動がおかしかったら見直す程度。
  • CollisionDetection:衝突の検知、つまりコライダーの計算方法を選ぶ。たとえば 1 FPS と 2 FPS の間の 1.5 FPS 時点でオブジェクト同士が衝突する場合、void Update では衝突が無かったことになる(壁をすり抜けたりする。これがデフォルトで選択されている、Discrete )。その対策方法として、Continuous や ContinuousDynamic を使用する。ただし、使用できるコライダーは限定される。やはり、最初のうちは気にしなくていい。
  • Constraits:Freeze Position は位置を固定、Freeze Rotation は回転を固定する。衝突したときにも有効で、予想していなかった方向へオブジェクトがすっ飛んでいかないように、オブジェクトの動きを制限する働きがある。最初のうちは気にしなくていい。

AddForce

Rigidbodyに力を加えるメソッド。
引数には力を加える方向とモードを指定する。

Rigidbody rb.AddForce(Vector3.forward);