UnityでInput.GetButtonをエミュレートできるようにする
PlatformControllerなどをつかうと、Input.GetButton("Jump")みたいなのがいっぱい使われています。
で、GUIのボタンを押したらジャンプとかしようと思って、Input.SetButtonDownとかやりたいのですが、そんなものはありません。
ということで探していると、フォーラムにInputBrokerとか作ればいいんじゃね?っていうエントリがあったので作って見ました。
#pragma strict private static var buttons : ArrayList = new ArrayList(); private static var upButtons : ArrayList = new ArrayList(); private static var downButtons : ArrayList = new ArrayList(); private static var lastFrame:int =-1; private static function Clean () :void { if ( lastFrame >0 && Time.frameCount > lastFrame + 1) { upButtons.Clear (); downButtons.Clear (); lastFrame = -1; } } function Update(){ Clean(); } static function GetButton (s:String) : boolean { return buttons.Contains (s) || Input.GetButton (s); } static function GetButtonDown (s:String) : boolean { return downButtons.Contains (s) || Input.GetButtonDown (s); } static function GetButtonUp (s:String) : boolean { return upButtons.Contains (s) || Input.GetButtonUp (s); } static function SetButtonDown ( s:String ) : void { lastFrame = Time.frameCount; downButtons.Add (s); buttons.Add (s); } static function SetButtonUp ( s:String ) :void { lastFrame = Time.frameCount; buttons.Remove (s); upButtons.Add (s); }
このスクリプトをInputBroker.jsとかの名前で保存(Standard Assets配下に置くのがいいかな?)します。
で、シーンに空のオブジェクトを作ってそこにアタッチ。
あとは、Input.GetButtonやInput.GetButtonDownを、InputBroker.GetButton, InputBroker.GetButtonDownに置換すれば完成。
これで、任意のタイミングでInputBroker.SetButton("Jump")とかすると、ジャンプのボタンを押したことになります。
もっといい方法がある?のかな?