在 Unity 中,可能經常需要用到一些 Android 或者 iOS 等原生功能,所以動態新增是很常見的。
這邊我們會說明一下 Android 如何動態新增物件到畫面中。

事實上在 Android 開發時,要動態添加物件進來是很容易的,因為 Android 佈局就有提供 addView 來做添加的動作。


舉例來說 LinearLayout 佈局的添加示範:

 
// 新增一個按鈕
Button btn = new Button( this );

// 取得畫面上的佈局, 並且將按鈕加入該佈局裡
LinearLayout l = (LinearLayout)findViewById(R.id.myLinearLayout);    // R.id.myLinearLayout 這名稱是自己定好的
l.addView( btn );
 

 


而 Unity 基本上做法是一樣的,只是取得佈局的地方需要修改:

 
// 新增一個按鈕
Button btn = new Button( this );

// 方法一 : 
// 取得目前畫面上的佈局, 而且是最底下的那層, 並且將按鈕加入該佈局裡
ViewGroup v = (ViewGroup)UnityPlayer.currentActivity.findViewById(android.R.id.content);
v.addView( btn );

// 方法二 : 
// 取得目前畫面上的佈局, 而且是最底下的那層, 並且將按鈕加入該佈局裡
ViewGroup v = (ViewGroup)UnityPlayer.currentActivity.getWindow().getDecorView().findViewById(android.R.id.content);
v.addView( btn );
 

 

android.R.id.content 為系統內建的 ID,它代表的物件為每個畫面的最底層佈局。(若有錯請指教...謝謝)

ViewGroup 是所有佈局的父層,所有的佈局都是繼承 ViewGroup 去做延伸的。
因為我們不曉得該畫面的佈局是什麼,所以我們用 ViewGroup 來接佈局。


因為佈局的階層為後加的在上,所以我們動態添加的 Button 階層會是最高的,所以他會疊在所有物件的上面。

PS:以上為 Android 的作法,所以必須由 Android 寫好函數或方法,打包成 JAR 檔後提供給 Unity 去呼叫使用。

詳細可參考 "Android Studio 匯出 JAR 檔 - 在 Unity 中調用 Android Function"。

 

arrow
arrow

    岳 發表在 痞客邦 留言(0) 人氣()