2023-02-04今回のスクリプトです。スターつけてくれると喜びます。https://github.com/konbraphat51/Unity-GoodInputManagerこの記事は素敵なInputManagerを書きました。モチベーションとしては、キー操作の対応を一か所にまとめたいエディタ上でキー操作を登録したいn度押しに簡単に対応したい関数を呼ぶことでキーを押したことにしたいというのがありました。キー操作の対応を一か所にまとめたい各々のオブジェクトが好き勝手にInput.GetKey()をしていたら、どいつがどのキーを読んでいるのかややこしくなるので、一元管理したいですよね。編集に参加できるところです。プログラマーだってノーコードで済む作業はノーコードで済ませたいでしょう。n度押しに対応したい一度押しで歩行、二度押しでダッシュ、のような仕様が欲しいですよね?しかしオブジェクトごとにその処理を書くのはだるい、、、なんと、こちらのInputManagerはn度押しを検知したら登録したメソッドを呼んでくれます!こちらは「一度押しで歩行、二度押しでダッシュ」を実装した例です。二度押しされるまで待って遅延させるより、一度押しがあった時点で歩行を開始し、二度押しを検知した時点で走行に切り替えています。天才じゃないですか?(もちろん、入力待ちができるようにもしています)関数を呼ぶことでキーを押したことにしたい例えばクリック検知とかでEventTriggerで呼ばれたものをキー入力扱いにしておきたいことってありますよね。(これは球へのクリックを「w」入力に変換している例です)実装!コードが全部で700行ほどあって、丸ごとをここに載せても記事がかさばるだけですので、全コードはこちらのgithubを参照していただくようお願いします。下記のコード例は、オリジナルのクラスやメソッドをゴリゴリに使っているので使いまわしは難しいです。メソッドやクラスの中身についてはgithubを参照してください。大筋の流れが参考になるかと思います。シングルトンにするシングルトンにすることで、staticなメソッドの呼び出し(オブジェクトの参照などせずにInputManager.Push()を書けるように)しています。そのシングルトンの処理については、こちらのTeachさんの記事からお借りしました。関数を登録しておいて、キーが押されたらそれを発動するUnityEventとUnityAction型を上手に活用することで実現できます。引数にUnityAction型を指定することで、メソッドをそのまんま渡すことができます。UnityEventを作っておいて、UnityEvent.AddListener()で登録。UnityEvent.Invoke()で発動させることができる、って寸法です。エディタ上で編集可能にするクラスの定義に[System.Serializable]をつけることで、クラスをエディタ上で編集できるようにできます。publicメソッドを登録できるのは、変数の型にUnityEventを指定したからです。enum型を使うことで、プルダウンメニューを作れます。0;}高度なn度押し対応n度押し自体の対応は、シンプルにキーが押されたら、そのキーに対応するタイマーを作って、タイマーが指定時間になったらアクションを開始するという感じです。「走る直前に歩く」のような二度押しされるまで一度押しのアクションを実行するn度押し対応の仕組みはこのような感じです。dontWaitがTrueと登録されたk度押しのアクションを、k度押しされた瞬間に発動するようにしています。発動するにはリストrunningActionsに入れることで発動します。k+1度目が押された瞬間に、runningActionsから削除すれば解決、ってことですね。}}最後にいいね大好きです。この記事にいいねしてください。