このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
またUnityで自由に使いこなせるようになっている方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。
今回は物理エンジンが持つ重力を変更する方法についてのご紹介です。
一分間Unity講座 3Dオブジェクトのジャンプ Step1 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
1、2Dの場合
1.1 個別に重力を変更する場合
個別に重力を変更するには、それぞれのオブジェクトが持つRigidbody2DコンポーネントのInspectorを変更します。
月の重力は地球の 1/6 なので, Gravity Scale プロパティの値に 0.16666666 と入力、または 1/6 と直接計算式を入力してもOKです。
この場合は、それぞれのオブジェクトに対する重力が変更されます。
1.2 Scene全体の重力を変更する場合
Scene全体の重力を変更するには、Physics2Dクラス が管理している Gravity の値を変更します。
上部メニュー Edit ⇒ Project Settings ⇒ Physics2D と辿り、一番上の「Gravity」を確認します。このプロパティはデフォルトで地球の重力加速度(-9.81m/s²)と指定されており、ここを直接変更することで、Scene全体の重力をコントロールすることができます。
またスクリプトファイルを使って、以下のように指定することもできます。
void Start()
{
Physics2D.gravity = new Vector3(0, -1.635f, 0); //地球の重力の1/6に指定
}
2、3Dの場合
2.1 個別に重力を変更する場合
特定のオブジェクトに対する重力を変更する場合は、スクリプトファイルで個別の重力を指定します。
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は、力を質量とは無関係に加速度として適用します。
2.2 Scene全体の重力を変更する場合
3Dの場合も2Dと同様、Project Settings でScene全体の重力の大きさを指定することができます。
上部メニュー Edit ⇒ Project Settings ⇒ Physics と辿り、一番上の「Gravity」を確認します。この値を初期値 -9.81 の1/6 の -1.635 に指定することで、重力の大きさを月レベルに変更することができます。
またスクリプトファイルで以下の様に全体の重力を変更することもできます
float defaultGravity = 9.81f;
void Start()
{
Physics.gravity = new Vector3(0, -defaultGravity / 6.0f, 0);
}
この方法を使えば、いろいろなシチュエーションごとの重力やオブジェクトごとの動きなどもコントロールが出来そうですね。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
Comments