前回は、とりあえず新しい入力検出方法の Input System を導入してみました。
今回は PS4のコントローラ を開発用のPCにつなぎ、スティックのアクションを受け取って移動してみます。
ゲームパッドの入力が有効になっているか確認
実は前回の設定が終わっていれば、そのままゲームパッドの入力を受け取ることができます。
前回作成した inputaction アセットの Move アクション内に Left Stick[Gamepad] があるのを確認し、Binding の Gamepad にチェックボックスが入っているのを確認します。
コントローラを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するだけです。
今回は可愛らしい農夫っ娘モデルを使っています。
まじで小気味よく動きます。
・参考