物理エンジンと当たり判定を使いこなそう(その1)

もうRigidbodyだめっす...
急にどうしたの
なんかもう世紀末になってるっす
なにそれこわい
ボクの作ってる
『ユニティちゃんアスレチック(仮)』が
荒ぶってるっす...
あああああああ
ユニティちゃんんんんん



取り乱してすまない。みんな、Rigidbody使っているだろうか。コレは簡単に物理エンジンが使えるチョー凄いヤツなのだが、機能や設定が多くて初心者がつまづきやすいのだ。
ありがちな状況としては

・オブジェクトが吹き飛ぶ
・高速で動くオブジェクトが壁を貫通する
・そもそもオブジェクトが動かなくなった

この辺りだろうか。使い方を覚えて正しく設定してあげれば多くの場合解決するので、どうかRigidbodyをキライにならないでほしい。 Rigidbodyのパラメータはこのようになっていて、これらを正しく設定すれば思い通りの挙動にできる。
上から順に説明していくよ

Mass

物体の質量 (Kg 単位)の設定。重いオブジェクトほど動かすのに力が必要。外部から力を加えたときの加速度が変化する。 青:1  緑:0.05

Drag

(空気)抵抗の設定。オブジェクトの動きに抵抗がかかる。パラシュート降下や水中など。 青:5  緑:0

Angular Drag

回転の抵抗。オブジェクトの回転に抵抗がかかる。ルーレットを回した時の止まりやすさなど。 青:2  緑:1

Use Gravity

重力を使用するか。チェックを入れると重力の影響を受ける。間違えて床にUseGravityのチェックを入れたら床が落ちていく。

Is Kinematic

物理演算によって動くかどうか。これが一番ムズカシイけど、衝突を考慮しつつ、動きはシミュレーションでなくスクリプトから制御したいときに使う。
...zzz
ゴホン!例を見せるよ
z..お、起きてるっすよ
これはIs Kinematicがオン
ユニティちゃんがドアに当たると
ドアがスクリプトで動くようにしてあるよ
普通に自動ドアっすね
Is Kinematicをオフにするとどうなるんすか?
これはIs Kinematicがオフ
ユニティちゃんがドアに当たると
その衝撃でドアが外れる
ユニティちゃんがパワー系に...
この設定はまだピンとこないかもしれないが、とりあえず覚えておいてほしいのは、これにチェックが入っている間は重力もAddForceもきかないし、衝突されてもビクともしない。スクリプトから思った通りに動かせるってことだ。

Interpolate

位置の補完機能。移動しているオブジェクトが、ガクガクブルブルしているときはこれを設定するといい。少し重い処理なので、常にカメラに写っているプレイヤーなどに対してだけ設定してあげるといいかも。
InterpolateとExtrapolateの2種類があるが、基本的にはExtrapolateでいいと思う。急な加速/減速がある場合はInterpolateのほうがいいらしい。

Collision Detection

すりぬけ防止の設定。高速で移動するオブジェクトが壁などをすり抜ける事を防止する設定。
そもそもなんですり抜けるっすか?
Unityはデフォルトで0.02秒ごとに当たり判定のチェックをしてるんだけど
速すぎるオブジェクトはそのチェックの合間に通りすぎちゃうんだな

DiscreteとContinuousとContinuousDynamicの3種類があり、デフォルトではDiscreteが選択されている。すり抜けをしっかり防止したい場合はContinuousDynamicを選択し、衝突される側にも同様にContinuousDynamicを設定してあげると良い。ただし結構重い処理なので多用すると処理落ちする。

Constraints

移動や回転の制限。物理エンジンを使っているとオブジェクトがぶっ飛んでいく時がある。このConstraintsを設定すれば指定した軸の移動や回転を止めることができる。
FreezePositionは指定した軸の移動を固定 FreezeRotationは指定した軸の回転を固定
することができる。






さてRigidbodyの設定はこれくらいにしておいて、もう一度たにっこさんの『ユニティちゃんアスレチック(仮)』を見てほしい。悲しいことにゲームスタートと同時に背景の木が爆散している。これはRigidbodyを持つオブジェクト同士のColliderが重なっていると起きる現象で、オブジェクトが吹き飛ぶのだ
よく考えたら背景の木に
Rigidbodyは必要なかったっす!
そうだね~
もう爆発させないでね




解説が長くなってしまったが、できればRigidbodyの相棒Colliderの話までしたかった。残念だが長くなってしまうので次回とさせてほしい。 次回の解説までしっかり理解してくれればUnityの当たり判定など恐れるに足らず!
たにっこさん、疲れたろう。
僕も疲れたんだ。
なんだか、とても眠いんだ。
それダメなやつっす!!