【unity入門】Rigidbody2Dの各項目や移動、摩擦、重力の変更などについてまとめてみた

2019年4月10日

unityで2Dゲームを作っているとRigitbody2Dを使う機会があるかと思います。

そこで、この記事ではRigitbody2Dについてまとめてみました!

扱っている内容については目次をご覧ください

そもそもRigidbody2Dとは

そもそもRigidbody2Dとは何かと言うと、2Dオブジェクトに物理現象を適応させるコンポーネントのことです。

コンポーネントというのはRPGゲームでいうところの装備品みたいなもので、オブジェクトにコンポーネントを追加することで色々な機能を追加することができます。

重力を変更する

Rigidbody2Dの重力は変更することができます。

例えば、重力の値を変えることでオブジェクトを浮かせることなどができますね。

オブジェクトの重力を変更してみたい方はこちらの記事をどうぞ『Rigidbody2Dの重力を変更する方法

AddForceで移動させる

Rigidbody2Dが追加されたオブジェクトを移動させたい場合があるでしょう。

オブジェクトはAddForce関数を使えば簡単に移動させることができます。

オブジェクトを移動させてみたい場合はこちらの記事をどうぞ『AddForceを使ったRigidbody2dの移動

摩擦を加える

Rigidbody2Dが追加されたオブジェクトは摩擦を加えることができます。

摩擦のかかり具合も変更することができるので、身につければ作れるゲームの幅が広がりますね!

オブジェクトに摩擦を加えたい場合はこちらの記事をどうぞ『Physics Material 2Dの使い方-『摩擦と跳ね返り』を設定しよう!

Rigidbody2Dの各項目

Rigidbody2Dの各項目について簡単に説明していきます。

Body Type

BodyTypeはRigidbody2Dの状態を変えることができます。

選択できる状態は、Dynamic (動的)Kinematic (キネマティック)Static (静的) の三つあります。

状態の詳しい説明や使い方を知りたい方はこちらの記事を参照してください『Rigitbody2DのBody Typeについて

Material

MaterialはPhysics Material 2Dを作成し、指定することでオブジェクトに摩擦を加えたり、跳ねるようにすることができます。

詳しいやり方を知りたい方はこちらの記事をどうぞ『Physics Material 2Dの使い方-『摩擦と跳ね返り』を設定しよう!

Simulated

Simulatedオンにすると物理現象が適応され、オフにすると物理現象が適応されなくなります。

Rigidbody2Dを追加した段階ではオンになっているので物理現象が適応されます。

オフにすると物理現象が適応されなくなりますが、処理が軽くなります。

Use Auto Mass

Use Auto Massはオンにするとコライダー の大きさから質量を予測してくれます。

オンにした場合、質量(Mass)は予測してくれるので変更できなくなります。

試しに質量(Mass)をログ出力してみましょう。

コライダー の大きさが60×60の場合は、

質量が約4.94になります。

コライダー の大きさを変更して35×35にした場合は、

質量が約1.68になります。

ログ出力に使ったコードは、

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

Mass質量を表しています。

値を変えることで、軽くしたり重くしたりすることができます。

Massの単位やスクリプトでの制御など詳しいことを知りたい方はこちらの記事をご覧ください『Rigidbody.mass(質量)についてのまとめ

Linear Drag

LinearDragは空気抵抗を表しています。

LinearDragの値を大きくしていくとオブジェクトは動きにくくなっていきます。

LinearDragの値が0では、

空気抵抗がないので勢いよく落下していきますが、

LinearDragの値を10に変更すると、

空気抵抗があるので緩やかに落ちていきます。

angular drag

angular dragオブジェクトが回転する時の空気抵抗を表しています。

angular dragの値を大きくしていくとオブジェクトが回転しづらくなります。

スクリプトによる制御など、angular dragを詳しく知りたい方はこちらの記事をどうぞ『Rigidbodyのangular dragについてのまとめ

Gravity Scale

Gravity Scaleはゲームオブジェクトにかかる重力の度合いを表しています。

値を大きくしていくと重力が強くかかるようになります。

値をマイナスにすると、

オブジェクトは浮かんでいきます。

Collision Detection

Collision Detectionものすごい速さでオブジェクトが当たった時にすり抜けるか設定することができます。

Discreteモードではすり抜けContinuousモードではすり抜けなくなります。

試しにGravity Scaleを100にして、

オブジェクトがものすごい速さで動くようになったらどうなるのか検証してみましょう。

Discreteモード

下側のオブジェクトに当たることなくすり抜けてしまいます。

Continuousモード

すり抜けることなく下側のオブジェクトの当たっていますね。

Sleeping Mode

Sleeping Modeはオブジェクトがスリープするときのモードを設定します。

スリープとは何かと言いますと、Rigidbody2Dが追加されたオブジェクトは最初の段階では物理演算の処理がオフになっており、その状態のことをスリープと呼びます。

スリープしているときは物理演算の処理がオフになっているので、起こす必要がありますよね。

いつスリープから起こすのかを設定できるのがSleeping Modeです。

モードはNever Sleep、Start Awake、Start Asleepの三つがあります。

Never Sleep

Never Sleepはそもそもスリープさせないというモードです。

大きな負荷がかかるのでunity公式から使うことを極力避けるように言われている不憫なモードです。

Start Awake

Start Awakeはゲーム起動時にスリープから起こすモードです。

Rigidbody2Dを追加した段階ではモードはStart Awakeですので、一番馴染みのあるモードではないでしょうか。

Start Asleep

Start Asleepはゲーム起動時はスリープモードですが、衝突されることによりスリープが解除されるモードです。

Interpolate

Interpolateは画面がガタガタするときにどのようにガタつきを軽減させるかを設定します。

そもそもガタつく原因は、Rigidbody2Dによって付与された物理演算と画面描画タイミングがずれていることです。

ガタつきを軽減させるために、画面描画のタイミングで物理演算が行われていないならどのような物理演算が行われるのか予測して補います。

どのような方法で予測して補うのか設定するのがInterpolateです。

None

Noneモードでは予測して補いません

ですので、もしガタつきがあるのならそのままガタつきます。

Rigidbody2Dを追加したばかりではモードはNoneになっています。

Interpolate

Interpolateは前フレームでのオブジェクト位置にもとづいて物理演算の動作を予測し補います。

Extrapolate

Extrapolateは次フレームのオブジェクト位置にもとづいて物理演算の動作を予測し補います。

Constraints

ConstraintsはRigidbody2Dを追加したオブジェクトの移動や回転に制限をかけることができます。

Constraintsをスクリプトで制御したい場合はこちらの記事をご覧ください『Constraintsをスクリプトで制御しよう!

まとめ

今回はRigidbody2Dの

・重力の変更
・移動
・摩擦の追加
・各項目


についてまとめました。

この記事を読んで少しでもRigidbody2Dの理解が深まったのなら幸いです。