會員登入 新使用者?立即註冊

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

關閉
你好,歡迎參觀我的部落格! 我要留言

最新文章

2012/01/10 16:24

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

回應(0) 引用(0)
2011/10/25 11:27

Dear All: 之前使用EZGUI真的很偷懶,都不弄懂Panel Transition裡Forward跟Back到底差在哪,今天終於下定決心搞定它。其實說穿了就是Panel裡index的“向上增加”或“向下遞減”而已。 來看個例子 ...《 詳全文

回應(0) 引用(0)
2011/10/24 10:30

Infographic by Android Developers at [x]cubelabs ...《 詳全文

回應(0) 引用(0)
2011/10/14 15:25

Code Optimization in Unity : Part 1 Code Optimization in Unity : Part 2 ...《 詳全文

回應(0) 引用(0)
2011/07/27 02:22

Dear All: 原理: 遊戲用到的Motion Trail原理其實很簡單,就是利用一個Queue,將兩參考點於每個Frame的位置記錄下來,這記錄通常是有條件的,也許是兩參考點與上一個Frame的紀錄比較距離, ...《 詳全文

回應(0) 引用(0)
2011/06/20 00:05

Dear All:這陣子因為工作上的需要開始看Irrlicht這套Open Source的Engine,就使用上來說,真的不得不佩服它直覺與乾淨的API介面,比起OGRE你會感覺OGRE是Ogre。當然Irrlicht也不是沒缺點,最嚴 ...《 詳全文

回應(0) 引用(0)
2011/05/18 01:01

Dear All: 在經過了一段漫長的歲月(其實是一直在偷懶...XD),小弟我終於把Porman-gl的log系統確定下來了,在此做些記錄。從定義開始:甚麼是Log system?? 定義: Log system是輔助debug的系統或 ...《 詳全文

回應(0) 引用(0)
2011/02/09 18:17

Dear All:最近這幾天玩了一下Boost::SmartPointer,感覺還不錯用,順手寫了些Sample Code,主要的內容是說:一各ResourceManager要如何精確管理Resource?確定Resource何時可以被release?換句 ...《 詳全文

回應(0) 引用(0)
2011/01/20 14:03

Dear All:這各部分是很久以前遇到的問題,問題是:“要將GPU所算出的rgba三原色,存入一張dds圖檔,當成Lightmap使用”,很直覺的問題在如何將[0.0, 1.0]的數值存到8bit中?其實這不算什麼新鮮的 ...《 詳全文

回應(0) 引用(0)
2011/01/20 11:28

Dear All:這幾天突然想到自己好像還不知道怎麼撰寫function pointer to member function,所以查了一下Google,在這邊整理一下:#include #include class A{public:    A( int i ...《 詳全文

回應(0) 引用(0)

部落格聯播

雅虎資訊 版權所有 © 2012 Yahoo! Taiwan All Rights Reserved
「本服務設有管理員」 服務條款 隱私權政策