ぱふの自由帳

ぱふの技術ブログ。メインはUnity。最近はUnity1Weekの放送してます。良ければフォローお願いします、、

PhysicsMaterial2D についての豆知識(摩擦編)

はじめに

PhysicsMaterial2D の摩擦(Friction)についての検証を行ったので結果を記事にまとめます。この記事では前提条件として Physics2DSetting の DefaultMaterial は None であるとします。

直方体Aと平たい板Bがどちらも Rigidbody2D と Collider2D をアタッチされている状態で存在しているとします。PhysicsMaterial2D をどのように扱うと、AをB上で運動させる際に生じる摩擦力にどのような影響を及ぼすのか様々なパターンでチェックして見ました。

確認する項目は以下の項目です。

  1. Rigidbody2D と Collider2D のどちらにアタッチするかで影響するのか?
  2. Rigidbody2D と Collider2D の両方にアタッチすると影響力が増すのか?
  3. A,Bの両方にアタッチしなければならないのか?それとも片方のみで良いのか?
  4. A,Bのそれぞれに異なった値の PhysicsMaterial2D をアタッチした場合、どちらが優先されるのか?
  5. A,Bのどちらにもアタッチしていない時でも摩擦が生じるがその時どのような値が設定されているのか?

これらを動いているAが止まるまでの移動距離を計測し、確認していきます。

検証結果

以下の表の○と×は PhysicsMaterial2D がそのコンポーネントにアタッチされているかどうかを表しています。また、Friction=1.0を設定しています。

f:id:PafuOfDuck:20170518131636p:plain

この表から項目1,2,3が確認できます。

  1. Rigidbody2D と Collider2D のどちらにアタッチしても影響はありませんでした。
  2. Rigidbody2D と Collider2D の両方にアタッチしても、どちらか一方にアタッチしている時と変わりませんでした。
  3. 後でも述べますがFriction=1.0の今回であれば、A,Bのどちらにもアタッチした時の摩擦力はどちらか一方のみにアタッチした時の摩擦力を上回っています。

次に項目4についてですが、A,Bに設定したFrictionを掛け合わせたものが等しければ生じる摩擦力も等しいという事実が検証を行う中で確認できました。すなわち、どちらが優先ということはありません。

最後の項目5については、PhysicsMaterial2D がアタッチされていないオブジェクトにはFriction=0.4があらかじめ設定されていることが値を試行錯誤していく中で確認できました。

ここで項目3の説明に戻ります。Frictionを掛け合わせたものが等しければ生じる摩擦力も等しく、Friction=0.4があらかじめ設定されていることから、A,Bの両方にアタッチするかどうかはどの程度の強さの摩擦力が欲しいかによると言えます。

ごちゃごちゃしているのでまとめ直します。

まとめ

  1. Rigidbody2D と Collider2D のどちらにアタッチしても影響はありません
  2. Rigidbody2D と Collider2D の両方にアタッチしても、どちらか一方にアタッチしている時と変わりません
  3. 欲しい摩擦力による
  4. 優先は存在しません
  5. Friction=0.4

おわり

ゲーム制作中に「 Rigidbody2D と Collider2D のどっちにアタッチしたらいいんだ?どっちもか?」と悩んだので、ついでに気になっていた関係とともに検証しました( *`ω´)v
Friction=0.4で満足する動きをするのであればアタッチをしなくても良いのかアタッチだけでもすべきなのかをご存知の方は是非コメントをお願いします!

にしても説明が下手ですね…分かりづらい箇所や間違った内容があればコメントをお願いします!こう書けば分かりやすいよというアドバイスも絶賛募集中です(´・ω・`)

初心者の方や熟練者の方を問わずTwitterのフォローお待ちしています…(`・ω・´) Let’s Unity !