有時候使用unity的時候會想要更改或使用到android內建的東西,像是android的鍵盤、android的通知欄(Toast)
這個時候單單使用unity能做到的事是有限的,所以必須使用android的plugin才能解決這類的問題
PluginsForAndroid 官方這邊就可以看到了
https://docs.unity3d.com/Manual/PluginsForAndroid.html
android plugin 的兩種格式
一個是用jar檔一個是aar檔,兩個都可以在unity內使用
兩者區別是:
jar檔只包含純code的模式,以下示意圖,每個jar檔可能都不一樣,當然還包含一些目錄的文件夾
aar檔則是有包含布局阿、圖檔阿…等這個plugin用到的資源,看起來像這樣
Unity官方則是推薦使用aar來當作plugin使用
製作android plugin的文章已經很多了,這邊講一下比較重要跟比較容易遇坑的幾點
導入classes (UNITY內的)
**
**unity有提供一個jar檔作為android 與 unity的橋樑,
大致路徑是C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
ps.如果最後輸出的是aar檔,最後要將aar檔內的libs/classes.jar刪除,以免與unity重複打包
app資料夾內build.gradle內
**
**1. apply plugin: ‘com.android.application’改成apply plugin: ‘com.android.library’ //因為是要當成plugin使用,所以要將application改成library,不然會輸出成apk
\2. applicationId “com.xx.xxxxx” //這一行刪除
\3. dependencies內新增compile files(‘libs/classes.jar’) //後面這個路徑是unity plugin接入的路徑跟檔名
\4. minSdkVersion 21 對應到 unity BuildSetting內的MinimumAPI LEVEL (下面有)
AndroidManifest
這個是一個xml檔案,用來指向unity連接android的入口與一些app屬性的操作,像是
裡面比較重要的是packgeName ,unity BuildSetting內的packgeName要跟AndroidManifest內的packgeName一樣,minSdkVersion 也必須跟BuildSetting內MinimumAPI Level一樣 (見下圖)
1 | <meta-data android:name="unityplayer.UnityActivity" android:value="true"/> |
放在下面 上面
完整版:
1 | <?xml version="1.0" encoding="utf-8"?> |
如果製作jar檔,可能會遇到的坑
上面一經贅述了很多,至於怎麼製作jar檔,參考連結應該會有,筆者爬了很多製作jar檔的方式,發現有個小坑,會讓你按export jar之後,資料夾與jar檔都沒出現在目錄上
對,就是gradle的版本,默認情況下會使用2.3.3版本,可是這樣照著網路上的資料來做的話,並不會出現想要的jar檔,我是改成2.2.3之後重build一次才出現jar檔的。
Extra: ((由於不多,所以不想多占一篇))
接上unity的plugin後,通常都會在MainActivity繼承UnityPlayerActivity (( 當然其他的Activity也可以,但是記得AndroidMainfest上的入口要修改為你用UnityPlayerActivity的那個 )),那這時已經建立連接口了,創建其他Activity的時候就不用再import UnityPlayerActivity了,除非有特殊需求,而如果要在unity內讀取其他Activity的話,則只需要使用AndroidJavaClass來指定讀取的路徑就可以了,像是我的packgeName為com.u2a.testconnect,第二個Activity 叫做SecondActivity,裡面有個靜態方GetSecondActivityNumber,回傳一個int,則會寫成這樣
Code:
1 | public Text log; |
關於``UnityPlayer.UnitySendMessage 看一下文件使用方法就知道了,這邊就不再多說。
成品:GOOGLE雲端
如果上述文章有任何疑問或錯誤理解,請留言告知我,感謝。
參考資料與延伸閱讀:
Android Activity與 UnityPlayer Activity
http://eppz.eu/blog/unity-android-plugin-tutorial-1/
Android和Unity混合开发——Activity和Unity脚本交互和信息传递
http://www.jianshu.com/p/a7d82b3ac0c4
Android studio中如何生成引用 .aar 和 .jar
http://www.jianshu.com/p/76559da9ab39
Android Studio导出并使用aar和jar
Android Studio 打包及引用 aar