以下の内容はhttps://indie-du.com/entry/2020/09/09/170131より取得しました。


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




以上の内容はhttps://indie-du.com/entry/2020/09/09/170131より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14