Dear All:
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
以上就是UNITY如何支援Xperia Play的Game Pad說明,希望對大家有幫助摟!!原整Script如下: XperiaPlayGamePad.cs
你好,我最近也建了一個有關遊戲程式的網誌,請問可以連結到你的網誌嗎?
回覆刪除OK!當然可以,你也是用UNITY嗎?如果是的話,我跟朋友有成立一個UnityIn的共筆部落,專門技路開發上的問題。
刪除網址是:
http://www.unityin.com/
我用的是Unreal Engine 3,網址是http://unrealrecord.blogspot.com。
回覆刪除Unity在移動平台上很紅,我也有興趣。
這是我的FB,交個朋友吧!
刪除http://facebook.com/EricLinFacebokk