質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.41%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

361閲覧

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

YUTO_IT

総合スコア20

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2024/04/29 07:34

実現したいこと

お世話になっております。
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が新たに追加されてしまい、意図した挙動にならず困っています。
改善点がお判りになりましたらご教示のほどよろしくお願いいたします。

初期画面

更新した際に追加される

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Processorsを更新せず、シングルトンパターン(Staticなクラス)を用いて値を管理することで解決しました。

投稿2024/05/08 09:21

YUTO_IT

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.41%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問