Prog-G

岐阜大学プログラミングサークル

重力を増やす

Unity

Unity 小ワザ紹介です。

物理演算をするゲームでは物体に重力を与えることが多いです。 Unity でも剛体コンポーネント Rigidbody は標準で重力を受けます。 重力加速度の値には地球上の値である \(9.81 [m/s^2]\) がデフォルトで使われていて、もちろんこの値を使ってもよいです。 しかし、ゲームによってはフワフワした見た目(落下が遅いと感じる)になることがあります(フワフワ感に一番影響するのはおそらく空気抵抗値ですが……)。

重力加速度を少し増やしてあげると、ゲーム的にそれっぽくなることがあります(ものによります)。

グローバルに重力加速度を増やす

Edit -> Project Settings -> Physics -> Gravity の値を変更します。 基本的には下向きの重力加速度を持つと思うので、y 軸に負の数値をいれます。

Physics Manager View

特定の Rigidbody だけ重力加速度を増やす

以下のスクリプトを Rigidbody を持つ GameObject にアタッチします。 Multiplier を 1.0 より増やすと追加の重力がかかります(負にすると逆向きの重力がかかる、零だと無重力)。

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class ExtraGravity : MonoBehaviour
{
    public float Multiplier = 1f;

    private Rigidbody Rigidbody;

    private void Start()
    {
        Rigidbody = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        Rigidbody.AddForce((Multiplier - 1f) * Physics.gravity, ForceMode.Acceleration);
    }
}

AddForce メソッドの ForceMode(第二引数)に ForceMode.Acceleration オプションを指定しています。 ForceMode.Acceleration は生じる加速度を指定して(\(F = ma\) の \(a\) に相当)力を与えます。 これは ForceMode に ForceMode.Force を指定して、加速度に質量を掛けたのと同じです。

それでは以下の全く参考にならない参考画像で締めたいと思います。

重力差の参考