UnityのInputSystemで、マウス感度をスクリプトから調節したいがうまくできない

実現したいこと

お世話になっております。
UnityでInputSystemを用いてコントローラを作成しており、スクリプトからマウス感度を調節できるようにしようと思っています。

実装方法

具体的な実装方法はInputActionの特定のボタン(マウスやゲームパッドでカメラのX軸,Y軸を回転させる機能)において、Processorsを設定して制御しています。
スクリプトからChangeBindingを用いてprocessorsを上書きすることで値を変更しようと思っています。

C#

1 public string name;2 3 //ディクショナリー型でボタンの名前とInputactionを管理。4 public Dictionary<string, InputAction> actions = new Dictionary<string, InputAction>();5 6 //コンストラクタでInputActionAssetにあるactionMapsをディクショナリー型に格納。7 public ActionMap(InputActionMap map)8 {9 name = map.name;10 11 foreach (var action in map.actions)12 {13 actions.Add(action.name, action);14     //一旦、マウスのカメラX軸,Y軸を回転させるBinding(bindings[0])のみ更新できるか実験。15 if (action.bindings[0].ToString().Contains("Look:<Pointer>"))16 {17 Debug.Log(action.bindings[0].processors);18       //それぞれ値を0.05から0.1に更新。19 action.ChangeBinding(0)20 .WithProcessor("Vector2DValueShift(shiftX=0.1,shiftY=0.1)");21 }22 23 }24 }

C#

1using UnityEngine;2using UnityEngine.InputSystem;3 4#if UNITY_EDITOR5using UnityEditor;6#endif7 8#if UNITY_EDITOR9[InitializeOnLoad]10#endif11public class Vector2DValueShiftProcessor : InputProcessor<Vector2>12{13 14 public float shiftX;15 public float shiftY;16 17 private const string ProcessorName = "Vector2DValueShift";18 19#if UNITY_EDITOR20 static Vector2DValueShiftProcessor() => Initialize();21#endif22 23 [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]24 static void Initialize()25 {26 27 if (InputSystem.TryGetProcessor(ProcessorName) == null)28 InputSystem.RegisterProcessor<Vector2DValueShiftProcessor>(ProcessorName);29 }30 31 Vector2 vect = new Vector2(0f,0f);32 public override Vector2 Process(Vector2 value, InputControl control)33 {34 vect.x = value.x * shiftX;35 vect.y = value.y * shiftY;36 Debug.Log(vect);37 return vect;38 }39}

発生している問題

ChangeBindingを用いて値を更新しようとしたところ、processorsが新たに追加されてしまい、意図した挙動にならず困っています。
改善点がお判りになりましたらご教示のほどよろしくお願いいたします。

初期画面

更新した際に追加される

コメントを投稿

0 コメント