ファイブボックス一分間Unity講座アイキャッチ画像
ファイブボックス一分間Unity講座アイキャッチ画像

1分間 Unity講座 重力の大きさを月レベルに変更する方法 - ファイブボックス

3D、2DでもScene全体、または個別に重力を変更することができます

1分間 Unity講座 重力の大きさを月レベルに変更する方法

このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。

またUnityで自由に使いこなせるようになっている方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。

今回は物理エンジンが持つ重力を変更する方法についてのご紹介です。

また「一分間Unity講座 2Dと3D環境で重力を月レベルに変更する方法」の補足説明資料です。ご興味がございましたら、こちらの動画もご参照ください!

2Dの場合

個別に重力を変更する場合

個別に重力を変更するには、それぞれのオブジェクトが持つRigidbody2Dコンポーネントの Inspector を変更します。

月の重力は地球の 1/6 なので, Gravity Scale プロパティの値に 0.16666666 と入力、または 1/6 と直接計算式を入力してもOKです。

Rigidbody2DのGravityScale の変更方法

この場合は、それぞれのオブジェクトに対する重力が変更されます。

Scene全体の重力を変更する場合

Scene全体の重力を変更するには、Physics2Dクラス が管理している Gravity の値を変更します。

上部メニュー Edit ⇒ Project Settings ⇒ Physics2D と辿り、一番上の「Gravity」を確認します。このプロパティはデフォルトで地球の重力加速度(-9.81m/s²)と指定されており、ここを直接変更することで、Scene全体の重力をコントロールすることができます。

ProjectSettingsからScene全体の重力を変更する方法

またスクリプトファイルを使って、以下のように指定することもできます。

void Start()
{
    Physics2D.gravity = new Vector3(0, -1.635f, 0); //地球の重力の1/6に指定
}

3Dの場合

個別に重力を変更する場合

特定のオブジェクトに対する重力を変更する場合は、スクリプトファイルで個別の重力を指定します。

float moonGravity; // 重力スケール
Rigidbody rb; 

void Start() 
{ 
    moonGravity = 1.0f / 6;
    rb = GetComponent<Rigidbody>(); 
}

void Update() 
{ 
    Vector3 customGravity = Physics.gravity * moonGravity;
  rb.AddForce(customGravity, ForceMode.Acceleration); 
}

ForceMode.Acceleration は、力を質量とは無関係に加速度として適用します。

Scene全体の重力を変更する場合

3Dの場合も2Dと同様、Project Settings でScene全体の重力の大きさを指定することができます。

上部メニュー Edit ⇒ Project Settings ⇒ Physics と辿り、一番上の「Gravity」を確認します。この値を初期値 -9.81 の1/6 の -1.635 に指定することで、重力の大きさを月レベルに変更することができます。

ProjectSettingsからScene全体の3D重力を変更する方法

またスクリプトファイルで以下の様に全体の重力を変更することもできます。

float defaultGravity = 9.81f;

void Start()
{
     Physics.gravity = new Vector3(0, -defaultGravity / 6.0f, 0);
}

この方法を使えば、いろいろなシチュエーションごとの重力やオブジェクトごとの動きなどもコントロールが出来そうですね。

ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP