こんにちは。現在Unityを使いキーコンフィグを実装し、コンフィグしたキーで短押しと離しを検知したいと考え以下のようなクラスを作りました
C#
1// コンフィグしたキーを検出するクラス 2public class ControllerManager : SingletonMonoBehaviour<ControllerManager> 3{ 4 public bool Search; 5 public bool SearchUp; 6 7 // PlayerPrefsにどのボタンがSearchというデータが入ってると思ってください 8 search_controller = PlayerPrefs.GetString("Search_Controller"); 9 10 void Start () 11 { 12 if (this != Instance) 13 { 14 Destroy(this); 15 return; 16 } 17 18 DontDestroyOnLoad(gameObject); 19 this.UpdateAsObservable().Subscribe(_ => 20 { 21 Array k = Enum.GetValues(typeof(KeyCode)); 22 for (int i = 0; i < k.Length; i++) 23 { 24 // 入力キー取得 25 if (Input.GetKeyDown((KeyCode)k.GetValue(i))) 26 { 27 GetKeyInput(i,k); 28 } 29 // 離した瞬間取得 30 else if(Input.GetKeyUp((KeyCode)k.GetValue(i))) 31 { 32 GetKeyUp(i, k); 33 } 34 // 非入力時解除 35 else 36 { 37 GetKeyNotInput(i, k); 38 } 39 } 40 } 41 } 42 43 public void GetKeyInput(int i,Array k) 44 { 45 if (k.GetValue(i).ToString().IndexOf("Joystick1") >= 0 && k.GetValue(i).ToString().IndexOf("Mouse") < 0) 46 { 47 // サーチ取得 48 if (k.GetValue(i).ToString() == search_controller) 49 { 50 Search = true; 51 SearchUp = false; 52 } 53 } 54 } 55 56 public void GetKeyUp(int i, Array k) 57 { 58 if (k.GetValue(i).ToString().IndexOf("Joystick1") >= 0 && k.GetValue(i).ToString().IndexOf("Mouse") < 0) 59 { 60 // サーチ取得 61 if (k.GetValue(i).ToString() == search_controller) 62 { 63 SearchUp = true; 64 } 65 } 66 } 67 68 public void GetKeyNotInput(int i, Array k) 69 { 70 if (k.GetValue(i).ToString().IndexOf("Joystick1") >= 0 && k.GetValue(i).ToString().IndexOf("Mouse") < 0) 71 { 72 // サーチ取得 73 if (k.GetValue(i).ToString() == search_controller) 74 { 75 Search = false; 76 } 77 } 78 } 79}
使うときは任意のUpdateで以下の関数を呼んで入力を検出します
C#
1public bool GetSearchInput() 2{ 3 4 if (ControllerManager.Instance.Search) 5 { 6 return true; 7 } 8 9 return false; 10} 11 12
ところが、この方式だとSearchを押したときにControllerManagerがSearchが押されている間ずっとtrueを返してしまいます
押した瞬間だけtrueを返させるにはどうしたらいいでしょうか?
よろしければご回答お願いします
回答1件
あなたの回答
tips
プレビュー