歡迎光臨B瑞克的Casual Report,主攻Rendering,副修哈拉、打屁加吹牛,有點年紀了才驚覺記性不比從前,因此把所學及經驗Po上部落,一方面幫忙記憶、一方面與同好分享心得,但最重要的是可以把到"妹" ?
歡迎光臨B瑞克的Casual Report,主攻Rendering,副修哈拉、打屁加吹牛,有點年紀了才驚覺記性不比從前,因此把所學及經驗Po上部落,一方面幫忙記憶、一方面與同好分享心得,但最重要的是可以把到"妹" ?

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如下:
Dear All: 之前使用EZGUI真的很偷懶,都不弄懂Panel Transition裡Forward跟Back到底差在哪,今天終於下定決心搞定它。其實說穿了就是Panel裡index的“向上增加”或“向下遞減”而已。 來看個例子 ...《 詳全文 》
Dear All: 原理: 遊戲用到的Motion Trail原理其實很簡單,就是利用一個Queue,將兩參考點於每個Frame的位置記錄下來,這記錄通常是有條件的,也許是兩參考點與上一個Frame的紀錄比較距離, ...《 詳全文 》
Dear All:這陣子因為工作上的需要開始看Irrlicht這套Open Source的Engine,就使用上來說,真的不得不佩服它直覺與乾淨的API介面,比起OGRE你會感覺OGRE是Ogre。當然Irrlicht也不是沒缺點,最嚴 ...《 詳全文 》
Dear All: 在經過了一段漫長的歲月(其實是一直在偷懶...XD),小弟我終於把Porman-gl的log系統確定下來了,在此做些記錄。從定義開始:甚麼是Log system?? 定義: Log system是輔助debug的系統或 ...《 詳全文 》
Dear All:最近這幾天玩了一下Boost::SmartPointer,感覺還不錯用,順手寫了些Sample Code,主要的內容是說:一各ResourceManager要如何精確管理Resource?確定Resource何時可以被release?換句 ...《 詳全文 》
Dear All:這各部分是很久以前遇到的問題,問題是:“要將GPU所算出的rgba三原色,存入一張dds圖檔,當成Lightmap使用”,很直覺的問題在如何將[0.0, 1.0]的數值存到8bit中?其實這不算什麼新鮮的 ...《 詳全文 》