2025年3月22日土曜日

Regidbody2D と Joystick Pack を利用してキャラを飛行させる【Unity 2D】

Regidbody2D と Joystick Pack を利用してキャラクターを動かす方法を紹介します。

利用例: スターリーキャプター

スターリーキャプターのゲーム画面、魔女が夜空を飛行しています

スターリーキャプターはiOSアプリにて好評配信中です!
Apple Store のページ

Unityのアセット「Joystick Pack」で提供されているバーチャルパッドを操作すると、魔女が上下左右に自由に移動し空を飛んでいるようになります。

この実装にあたってのポイントを3つ挙げます

3つのポイント

1. 重力をゼロにする → Regidbody2DのGravity Scale
2. 力を与える → Regidbody2D の AddForce + Joystick Pack の出力値
3. 空気抵抗を設定する → Regidbody2DのLinear Drag

Regidbody2DのInspector上のプロパティ

1. 重力をゼロにする

Regidbody2Dの「Gravity Scale」プロパティは重力の値で、デフォルトの1だとオブジェクトは下に移動しますが、これを0にするとその場にとどまります。重力は下方向の力で、下方向の力が加わるとオブジェクトは下に動きますが、それを0にしたので動かなくなるという仕組みです。

2. 力を与える

力を与える方法はRegidbody2Dの「AddForce」関数を利用します。Update関数にて、バーチャルパッドを操作している間だけオブジェクトに力を与えることにします。

Joystick Packの説明は 「Joystick Pack リファレンスと利用例」 をご確認ください。

3. 空気抵抗を設定する

オブジェクトは抵抗がないと減衰せずにずっと動き続けてしまいます。抵抗を設定する必要がありますが、Regidbody2Dでは空気抵抗を設定できます。

空気抵抗は「Linear Drag」プロパティで、デフォルトはゼロで抵抗がない状態、ここの数値をオブジェクトの速度の減衰具合をみながら調整します。スターリーキャプターでは0.9としています。

ソースコード例

public class Majo : MonoBehaviour
{
    // Inspector に Joystick を登録できるようにする
    [SerializeField] Joystick joystick;
    
    // 物理演算を利用してオブジェクトを動かす
    private Rigidbody2D rigidBody2D;
    
    void Start()
    {
        rigidBody2D = GetComponent<Rigidbody2D>();
    }

    // FixedUpdate: Unityの物理演算独自の更新タイミング(0.02秒間隔 = 50FPS)
    void FixedUpdate()
    {
        // スティックの横方向の傾きの値を格納 -1f〜1fの範囲
        float directionX = joystick.Horizontal;

        // スティックの盾方向の傾きの値を格納 -1f〜1fの範囲
        float directionY = joystick.Vertical;

        // 物理演算を利用してオブジェクトを動かす
        var forceDirection = new Vector2( directionX, directionY );
        float force = 10f;
        rigidBody2D.AddForce( forceDirection * force );
    }
}

0 件のコメント:

コメントを投稿

【注目記事】

ゲーム用ドット絵の配色は「LOSPEC」で解決!

【人気記事】