最近做一個專案,為同事提供介面,能使他在Unity中呼叫Android中的函式來實作QQ登陸并獲取用戶資訊。按照一些書上和一些貼吧的東西弄了幾天,有時候邏輯雖然都走通了,但是有時候還是會出一些問題,現在就將出現的一些問題做一個總結。
1、開發工具Unity3d eclipse,雖然android目前的開發已經普遍使用android studio但是這里建議你使用eclipse
2、言歸正傳,首先我們要定義android的介面,在創建介面之前,我們首先來創建專案。(這里針對沒有使用過eclipse的同學)

3、配置最小的SDK和最大的SDK和編譯的SDK(為什么要配置這個,簡單理解一下,就是隨著android作業系統的不斷升級,發布給開發人員的api也隨著升級,高版本SDK的某個新功能(介面)可能在低版本作業系統上用不了,進行一個容錯性提示)。
為了保證package唯一最好是你們公司的域名倒序+專案名稱,比如Google 就是google.com.test


4、一路狂奔到完成,在下面的界面,可以勾選Make is Libray(如果你的介面很復雜,可以暫時不勾選,使用Eclipse除錯完畢后,打包的時候修改為選中,不會可以百度)

5、在定義介面之前,先簡單說一下Activity,在創建完專案的時候,系統已經提供了一個Activity,默認的類名叫MainActivity,并且在androidManifest.xml已經配置為主Activity,程式一運行,首先就會創建這個Activity的實體,并且呼叫其生命周期方法。
Activity和普通的java類不同,他不能用new去實體化,只能由系統去創建。如果你去new他就是一個普通的java類,如果專案中有多個Activity,其他的Activity要想實體化,必須直接或者間接依賴MainActivity,他就好比一個入口。
在Unity腳本中,也只能獲取MainActivity的參考.(如果上面的看不懂可以往下看6)
6、由于程式一啟動,首先創建MainActivity的實體,并且回呼onCreate()等方法。我們的Unity的主界面是靠scene去渲染,所以洗掉MainActivity中setContentView();并且將繼承關系改變。
6.1:加入Unity提供的一個jar包(jar包的本質就是一個class庫),jar包的位置在安裝目錄下面的Editor\Data\PlaybackEngines\androidplayer\development\bin(根據自己的實際位置找),classes.jar。

6.2:使用非打包的形式加入jar包。(不要將classes.jar直接復制到libs下面去)
選擇專案/preferences/Java BuildPath../Library/Add External Jars

6.3:洗掉不用的代碼,改變繼承關系.(一定要洗掉setContentView,因為他的界面是由Unity Scene提供)

7、增加方法(讓其被Unity呼叫),這里我們就定義一個輸出土司的一個方法,非常簡單,Unity傳遞一個String型別的引數name,就可以輸出土司Hello :name

8、再增加一個方法,能讓他進行Activity的跳轉。跳轉之前我們講一下Activity的創建。
8.1:我們先創建 一個類。

8.2:增加其繼承關系,讓他繼承Activity 類并且重寫其onCreate()方法。

8.3:定義完畢的Activity類只是普通的java類,我們要在AndroidManifest.xml進行配置,讓其成為一個Activity
注意是在Application節點下面配置

8.4到此Activity就配置完畢了,我們的Android程式就由2個Activity組成,第一個Activity的界面由Unity Scene到時候提供
第二個Activity是默認界面,下面我們修改SecondActivity的界面
8.5:設定界面呼叫setConetentView();

8.6:修改一下這個界面,android中的界面其實就是xml檔案,通過樹狀結構管理View的層次
可以在視圖模式下拖拽組件,但是不是很好用 。

8.7到這里我們SecondActivity的定義,配置,布局已經設定完畢。接下來我們在MainActivity中定義一個方法,用來在Unity呼叫,進行跳轉
9.MainActivity定義一個方法,跳轉到SecondActivity,很簡單,就一個跳轉

10、到此android的介面定義完畢,在打包之前,還需要干一些事情,這些事情如果不做,打包的東西有可能無法被呼叫
10.0:修改專案Make is Libray
10.1:在Project選單下 取消Bulild Autocomplie(自動編譯)
10.2 :clean一下專案
10.3: Build Project一下專案

11.打包我們Android專案,按道理來說,打包的東西只需要class就可以,但是我們的專案中除了自己的class還有自動生成的
gen目錄下面的東西,還有其他資源,為了不遺漏,干脆全部打包。res AndroidManifest.xml也被打包,這些只不過是垃圾而已。


12.到此Android的介面已經定義完畢。接下講來如何在Unity中呼叫
1、創建Unity的應用
2、在Assets下面定義Plugins\Android檔案夾

3、在Android下面定義bin 將11步產生的jar包加入bin,并且把專案中的res,assets,libs ,AndroisManifest.xml復制到Android目錄下,這些都是Android的資源。

4、復制完畢后
最后的目錄結構

5、稍微修改一下AndroidManifest.xml
5.1打開安裝路徑下Editor\Data\PlaybackEngines\androidplayer\AndroidManifest.xml,

把里面紅色部分復制到我們程式的AndroidManifest.xml中,copy完畢后

6.Unity中撰寫代碼呼叫MainActivity中的函式

7、編譯成apk
注意buildsetting設定一下

8、好了,我們把編譯好的程式運行一下
uj5u.com熱心網友回復:
最后運行發現繼承與UnityPlayerActivity的Activity中無法在程式內部顯示View 所以Toast無法顯示uj5u.com熱心網友回復:
注意一下 7、增加方法,在UnityPlayerActivity中如果想使用View public void sayHello(final String name) {runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "你好呀" + name, 0).show();
}
});
}
uj5u.com熱心網友回復:
unity學習者,完全沒接觸過java,沒用過eclipse。寫的詳細。精華帖。受用。到處找不到unity匯入jar相關的檔案。感謝樓主。特此回復。
uj5u.com熱心網友回復:
好!!!!!!!!!!!!!!!!!!!!1uj5u.com熱心網友回復:
剛哥威武,剛哥霸氣轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/65906.html
標籤:Unity3D
