【unity入門】Rigidbody2Dの各項目や移動、摩擦、重力の変更などについてまとめてみた
![](https://mogi0506.com/wp-content/uploads/2019/03/stephanie-harvey-431242-unsplash-1024x600.jpg)
unityで2Dゲームを作っているとRigitbody2Dを使う機会があるかと思います。
そこで、この記事ではRigitbody2Dについてまとめてみました!
扱っている内容については目次をご覧ください。
この記事の目次
そもそもRigidbody2Dとは
そもそもRigidbody2Dとは何かと言うと、2Dオブジェクトに物理現象を適応させるコンポーネントのことです。
コンポーネントというのはRPGゲームでいうところの装備品みたいなもので、オブジェクトにコンポーネントを追加することで色々な機能を追加することができます。
重力を変更する
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-35.gif)
Rigidbody2Dの重力は変更することができます。
例えば、重力の値を変えることでオブジェクトを浮かせることなどができますね。
オブジェクトの重力を変更してみたい方はこちらの記事をどうぞ『Rigidbody2Dの重力を変更する方法』
AddForceで移動させる
![](https://mogi0506.com/wp-content/uploads/2019/03/名称未設定.mov-28.gif)
Rigidbody2Dが追加されたオブジェクトを移動させたい場合があるでしょう。
オブジェクトはAddForce関数を使えば簡単に移動させることができます。
オブジェクトを移動させてみたい場合はこちらの記事をどうぞ『AddForceを使ったRigidbody2dの移動』
摩擦を加える
![](https://mogi0506.com/wp-content/uploads/2019/04/名称未設定.mov-2.gif)
Rigidbody2Dが追加されたオブジェクトは摩擦を加えることができます。
摩擦のかかり具合も変更することができるので、身につければ作れるゲームの幅が広がりますね!
オブジェクトに摩擦を加えたい場合はこちらの記事をどうぞ『Physics Material 2Dの使い方-『摩擦と跳ね返り』を設定しよう!』
Rigidbody2Dの各項目
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36.png)
Rigidbody2Dの各項目について簡単に説明していきます。
Body Type
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー.png)
BodyTypeはRigidbody2Dの状態を変えることができます。
選択できる状態は、Dynamic (動的), Kinematic (キネマティック), Static (静的) の三つあります。
状態の詳しい説明や使い方を知りたい方はこちらの記事を参照してください『Rigitbody2DのBody Typeについて』
Material
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー2.png)
MaterialはPhysics Material 2Dを作成し、指定することでオブジェクトに摩擦を加えたり、跳ねるようにすることができます。
詳しいやり方を知りたい方はこちらの記事をどうぞ『Physics Material 2Dの使い方-『摩擦と跳ね返り』を設定しよう!』
Simulated
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー3.png)
Simulatedはオンにすると物理現象が適応され、オフにすると物理現象が適応されなくなります。
Rigidbody2Dを追加した段階ではオンになっているので物理現象が適応されます。
オフにすると物理現象が適応されなくなりますが、処理が軽くなります。
Use Auto Mass
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー4.png)
Use Auto Massはオンにするとコライダー の大きさから質量を予測してくれます。
オンにした場合、質量(Mass)は予測してくれるので変更できなくなります。
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-17.07.28.png)
試しに質量(Mass)をログ出力してみましょう。
コライダー の大きさが60×60の場合は、
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-17.34.27.png)
質量が約4.94になります。
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-17.36.37.png)
コライダー の大きさを変更して35×35にした場合は、
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-17.42.44.png)
質量が約1.68になります。
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-17.43.23.png)
ログ出力に使ったコードは、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
void Start()
{
//Rigidbody2Dを取得
var rb = GetComponent<Rigidbody2D>();
//質量をログ出力
Debug.Log("質量は:" + rb.mass);
}
}
Mass
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー5.png)
Massは質量を表しています。
値を変えることで、軽くしたり重くしたりすることができます。
Massの単位やスクリプトでの制御など詳しいことを知りたい方はこちらの記事をご覧ください『Rigidbody.mass(質量)についてのまとめ』
Linear Drag
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー7.png)
LinearDragは空気抵抗を表しています。
LinearDragの値を大きくしていくとオブジェクトは動きにくくなっていきます。
LinearDragの値が0では、
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-18.26.27.png)
空気抵抗がないので勢いよく落下していきますが、
![](https://mogi0506.com/wp-content/uploads/2019/04/名称未設定.mov-10.gif)
LinearDragの値を10に変更すると、
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-18.37.56.png)
空気抵抗があるので緩やかに落ちていきます。
![](https://mogi0506.com/wp-content/uploads/2019/04/名称未設定.mov-11.gif)
angular drag
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー8.png)
angular dragはオブジェクトが回転する時の空気抵抗を表しています。
angular dragの値を大きくしていくとオブジェクトが回転しづらくなります。
スクリプトによる制御など、angular dragを詳しく知りたい方はこちらの記事をどうぞ『Rigidbodyのangular dragについてのまとめ』
Gravity Scale
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー9.png)
Gravity Scaleはゲームオブジェクトにかかる重力の度合いを表しています。
値を大きくしていくと重力が強くかかるようになります。
値をマイナスにすると、
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-19.03.28.png)
オブジェクトは浮かんでいきます。
![](https://mogi0506.com/wp-content/uploads/2019/04/名称未設定.mov-12.gif)
Collision Detection
Collision Detectionはものすごい速さでオブジェクトが当たった時にすり抜けるか設定することができます。
Discreteモードではすり抜け、Continuousモードではすり抜けなくなります。
試しにGravity Scaleを100にして、
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-19.26.36.png)
オブジェクトがものすごい速さで動くようになったらどうなるのか検証してみましょう。
Discreteモード
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-19.47.54.png)
下側のオブジェクトに当たることなくすり抜けてしまいます。
![](https://mogi0506.com/wp-content/uploads/2019/04/名称未設定.mov-13.gif)
Continuousモード
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-22.51.11.png)
すり抜けることなく下側のオブジェクトの当たっていますね。
![](https://mogi0506.com/wp-content/uploads/2019/04/名称未設定.mov-14.gif)
Sleeping Mode
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-07-15.17.36のコピー11.png)
Sleeping Modeはオブジェクトがスリープするときのモードを設定します。
スリープとは何かと言いますと、Rigidbody2Dが追加されたオブジェクトは最初の段階では物理演算の処理がオフになっており、その状態のことをスリープと呼びます。
スリープしているときは物理演算の処理がオフになっているので、起こす必要がありますよね。
いつスリープから起こすのかを設定できるのがSleeping Modeです。
モードはNever Sleep、Start Awake、Start Asleepの三つがあります。
Never Sleep
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-08-0.35.01.png)
Never Sleepはそもそもスリープさせないというモードです。
大きな負荷がかかるのでunity公式から使うことを極力避けるように言われている不憫なモードです。
Start Awake
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-08-0.53.45.png)
Start Awakeはゲーム起動時にスリープから起こすモードです。
Rigidbody2Dを追加した段階ではモードはStart Awakeですので、一番馴染みのあるモードではないでしょうか。
Start Asleep
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-09-12.33.55.png)
Start Asleepはゲーム起動時はスリープモードですが、衝突されることによりスリープが解除されるモードです。
Interpolate
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-09-12.39.27.png)
Interpolateは画面がガタガタするときにどのようにガタつきを軽減させるかを設定します。
そもそもガタつく原因は、Rigidbody2Dによって付与された物理演算と画面描画タイミングがずれていることです。
ガタつきを軽減させるために、画面描画のタイミングで物理演算が行われていないならどのような物理演算が行われるのか予測して補います。
どのような方法で予測して補うのか設定するのがInterpolateです。
None
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-09-12.57.19.png)
Noneモードでは予測して補いません。
ですので、もしガタつきがあるのならそのままガタつきます。
Rigidbody2Dを追加したばかりではモードはNoneになっています。
Interpolate
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-09-14.06.10.png)
Interpolateは前フレームでのオブジェクト位置にもとづいて物理演算の動作を予測し補います。
Extrapolate
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-09-14.06.19.png)
Extrapolateは次フレームのオブジェクト位置にもとづいて物理演算の動作を予測し補います。
Constraints
![](https://mogi0506.com/wp-content/uploads/2019/04/スクリーンショット-0031-04-09-14.24.34.png)
ConstraintsはRigidbody2Dを追加したオブジェクトの移動や回転に制限をかけることができます。
Constraintsをスクリプトで制御したい場合はこちらの記事をご覧ください『Constraintsをスクリプトで制御しよう!』
まとめ
今回はRigidbody2Dの
・重力の変更
・移動
・摩擦の追加
・各項目
についてまとめました。
この記事を読んで少しでもRigidbody2Dの理解が深まったのなら幸いです。