実現したいこと
お世話になっております。
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_EDITOR 5using UnityEditor; 6#endif 7 8#if UNITY_EDITOR 9[InitializeOnLoad] 10#endif 11public 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_EDITOR 20 static Vector2DValueShiftProcessor() => Initialize(); 21#endif 22 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が新たに追加されてしまい、意図した挙動にならず困っています。
改善点がお判りになりましたらご教示のほどよろしくお願いいたします。
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。