Dear All: ( 文章轉載自UnityIN )
Hello~如果有Xperia Play且常玩遊戲的朋友因該都有發現,目前支援Xperia Game pad的遊戲其實也滿多的,其中UNITY的作品也不少,最近一款讓我比較喜歡的就是“Muffin Knight”,開發商Angry Mob Games在更之前的一款作品“Guerrilla Bob”,早在2011年初就支援了Xperia Play的Game pad。
當時天真的以為UNITY因該直接呼叫Input.GetKey (KeyCode.UpArrow)之類的function就可以解決,並且有提共一個Event讓你去聽,“使用者”目前是否已經打開的Xperia Play的Game Pad,沒甚麼大不了。可惜事情往往被想簡單了,最近碰了才知道,原來UNITY的Script API本身並沒有完整支援Xperia Play的Game Pad,開發者需要透過UNITY提共的JAVA函數庫來啟動這項功能。
很困難嗎?沒有啦~,你只需要先透過UNITY提共的AndroridJavaObject去實體化JAVA函數庫的類別,之後在透過function去check手機目前的狀態,來判斷操作的模式,如下所示:
protected void Awake () { InitAndroidConfigLink(); } private AndroidJavaObject _m_currentConfig = null;
private void InitAndroidConfigLink() { using( AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer") ) { AndroidJavaObject activity = player.GetStatic("currentActivity"); _m_currentConfig = activity.Call ("getResources").Call ("getConfiguration"); } }
一切的重點就在你取得_m_currentConfig 的設定,有了這個設定後你就可以自行Check手機的Game Pad是否已經開啟。這部分你可以每個Update檢查或隔幾秒檢察,使用者是否開啟或關閉Game Pad,不過更好的做法我想因該是Coroutine,自動動又方便。來看以下程式碼:
protected void Start () { StartCoroutine( CheckForVirtualGamePadStatus() ); } private IEnumerator CheckForVirtualGamePadStatus() { const int NAVIGATIONHIDDEN_UNDEFINED = 0; //const int NAVIGATIONHIDDEN_NO = 1; const int NAVIGATIONHIDDEN_YES = 2; int nav; while(true) { nav = _m_currentConfig.Get("navigationHidden"); if( nav == NAVIGATIONHIDDEN_YES || nav == NAVIGATIONHIDDEN_UNDEFINED ) { if( _m_VirtualGamePad == true ) { _m_VirtualGamePad = false; } } else { if( _m_VirtualGamePad == false ) { _m_VirtualGamePad = true; } } yield return new WaitForSeconds(2.0f); } } protected void Update () { if( _m_VirtualGamePad ) {
//Do something for Xperia Gamepad...
} else {
//Do others...
}
}
接著剩下的就是Key Codes的對應啦!如下表:
Input.GetKey (KeyCode.LeftShift) = Left shoulder Input.GetKey (KeyCode.RightShift) = Right shoulder Input.GetKey (KeyCode.UpArrow) = Up Input.GetKey (KeyCode.LeftArrow) = Left Input.GetKey (KeyCode.RightArrow) = Right Input.GetKey (KeyCode.DownArrow) = Down Input.GetKey ("joystick button 2") = /\ Input.GetKey ("joystick button 1") = [] Input.GetKey ("joystick button 3") = O Input.GetKey ("joystick button 0") = X Input.GetKey (KeyCode.Pause) = SELECT Input.GetKey (KeyCode.Return) = START Input.GetKey(KeyCode.Menu) = Android Menu Input.GetKey(KeyCode.Escape) = Android Back AndroidInput = TouchPad
Email: ericlin09@gmail.com
曾任職台灣某遊戲公司研發Game Engine,專攻Rendering技術與遊戲開發,目前為獨立開發團隊CocosPlay主程式
沒有留言:
張貼留言