いんでぃーづ

ゲームメインのブレブレブログ。ゲーム,Unity,デザイン,UI/UX

Unity : Input System でゲームパッドからの入力を受け取る

{スポンサーリンク}

前回は、とりあえず新しい入力検出方法の Input System を導入してみました。

indie-du.com

今回は PS4のコントローラ を開発用のPCにつなぎ、スティックのアクションを受け取って移動してみます。

f:id:sugar_affordance:20200909164322j:plain
サムネ用

ゲームパッドの入力が有効になっているか確認

実は前回の設定が終わっていれば、そのままゲームパッドの入力を受け取ることができます。

前回作成した inputaction アセットの Move アクション内に Left Stick[Gamepad] があるのを確認し、BindingGamepadチェックボックスが入っているのを確認します。

f:id:sugar_affordance:20200909164505p:plain

コントローラをPCとペアリングする

PS4のコントローラはBluetoothでペアリングすれば、ゲームでHIDプロファイルのコントローラとしてそのまま使うことができます。
(ところでBluetoothが主になってから「ブッ挿す」という表現ができなくなってさみしいですね。使うとこないけど)

スティックの入力を受け取るためにスクリプトを修正

前回のスクリプトの関数を以下のように修正。

public class Farmer : MonoBehaviour
{
    [SerializeField] Animator FarmerAnimator;

    float speed = 2f;

    const string ANIM_BOOL_MOVE = "Move";

    public void Move(InputAction.CallbackContext context)
    {
        // スティックの入力を受け取る
        var v = context.ReadValue<Vector2>();

        // 移動量を計算
        var mov = new Vector3(v.x * speed * Time.deltaTime, 0, v.y * speed * Time.deltaTime);

        switch (context.phase) {
        case InputActionPhase.Started:
            // 入力開始

            // アニメーション設定
            FarmerAnimator.SetBool(ANIM_BOOL_MOVE, true);

            // 移動方向を向く
            transform.forward = mov;
            break;
        case InputActionPhase.Canceled:
            // 入力終了

            // アニメーション設定
            FarmerAnimator.SetBool(ANIM_BOOL_MOVE, false);
            break;
        default:
            // 移動方向を向く
            transform.forward = mov;
            break;
        }

        // 移動させる
        transform.position = transform.position + mov;
    }


}

「前回のソースと全然ちがうじゃねえか!」とマジギレしないでください(半ギレ)。

追加点としては

  • context.phase を参照して アクションの開始と終了 を判定するようにした
  • Animatorのパラメータを設定してアニメーション変更
  • 移動と同時に向いている方向を補正

をしています。

注)どうも同一方向に倒しっぱなしだとMove関数が呼ばれないようなので上のソースにひと工夫必要なようです

実行してみる

あとはPlayするだけです。

今回は可愛らしい農夫っ娘モデルを使っています。

f:id:sugar_affordance:20200909165705g:plain

まじで小気味よく動きます。


・参考

Gamepad Support | Input System | 1.0.0

Enum InputActionPhase | Input System | 1.0.0


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。