2019/06/28物理エンジンと当たり判定を使いこなそう(その1)すぐできるスクリプトいらない初めてのUnityTweetもうRigidbodyだめっす...急にどうしたのなんかもう世紀末になってるっすなにそれこわいボクの作ってる『ユニティちゃんアスレチック(仮)』が荒ぶってるっす...あああああああユニティちゃんんんんん取り乱してすまない。みんな、Rigidbody使っているだろうか。コレは簡単に物理エンジンが使えるチョー凄いヤツなのだが、機能や設定が多くて初心者がつまづきやすいのだ。ありがちな状況としては・オブジェクトが吹き飛ぶ・高速で動くオブジェクトが壁を貫通する・そもそもオブジェクトが動かなくなったこの辺りだろうか。使い方を覚えて正しく設定してあげれば多くの場合解決するので、どうかRigidbodyをキライにならないでほしい。Rigidbodyのパラメータはこのようになっていて、これらを正しく設定すれば思い通りの挙動にできる。重いオブジェクトほど動かすのに力が必要。外部から力を加えたときの加速度が変化する。緑:0.05Drag(空気)抵抗の設定。オブジェクトの動きに抵抗がかかる。パラシュート降下や水中など。オブジェクトの回転に抵抗がかかる。ルーレットを回した時の止まりやすさなど。Gravity重力を使用するか。チェックを入れると重力の影響を受ける。間違えて床にUseGravityのチェックを入れたら床が落ちていく。Kinematic物理演算によって動くかどうか。これが一番ムズカシイけど、衝突を考慮しつつ、動きはシミュレーションでなくスクリプトから制御したいときに使う。Kinematicがオフユニティちゃんがドアに当たるとその衝撃でドアが外れるユニティちゃんがパワー系に...この設定はまだピンとこないかもしれないが、とりあえず覚えておいてほしいのは、これにチェックが入っている間は重力もAddForceもきかないし、衝突されてもビクともしない。スクリプトから思った通りに動かせるってことだ。Interpolate位置の補完機能。移動しているオブジェクトが、ガクガクブルブルしているときはこれを設定するといい。重い処理なので、常にカメラに写っているプレイヤーなどに対してだけ設定してあげるといいかも。InterpolateとExtrapolateの2種類があるが、基本的にはExtrapolateでいいと思う。急な加速/減速がある場合はInterpolateのほうがいいらしい。Detectionすりぬけ防止の設定。高速で移動するオブジェクトが壁などをすり抜ける事を防止する設定。そもそもなんですり抜けるっすか?Unityはデフォルトで0.02秒ごとに当たり判定のチェックをしてるんだけど速すぎるオブジェクトはそのチェックの合間に通りすぎちゃうんだなDiscreteとContinuousとContinuousDynamicの3種類があり、デフォルトではDiscreteが選択されている。すり抜けをしっかり防止したい場合はContinuousDynamicを選択し、衝突される側にも同様にContinuousDynamicを設定してあげると良い。重い処理なので多用すると処理落ちする。Constraints移動や回転の制限。物理エンジンを使っているとオブジェクトがぶっ飛んでいく時がある。このConstraintsを設定すれば指定した軸の移動や回転を止めることができる。FreezeRotationは指定した軸の回転を固定することができる。Rigidbodyの設定はこれくらいにしておいて、もう一度たにっこさんの『ユニティちゃんアスレチック(仮)』を見てほしい。悲しいことにゲームスタートと同時に背景の木が爆散している。これはRigidbodyを持つオブジェクト同士のColliderが重なっていると起きる現象で、オブジェクトが吹き飛ぶのだ。考えたら背景の木にRigidbodyは必要なかったっす!そうだね~もう爆発させないでね解説が長くなってしまったが、できればRigidbodyの相棒Colliderの話までしたかった。残念だが長くなってしまうので次回とさせてほしい。次回の解説までしっかり理解してくれればUnityの当たり判定など恐れるに足らず!たにっこさん、疲れたろう。なんだか、とても眠いんだ。