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")とかすると、ジャンプのボタンを押したことになります。


もっといい方法がある?のかな?