首先講導出Jar包,在之前都是用這種方法,可是如今官方不推薦使用此方法,官方推薦導出Aar包html
(1)首先建立一個Android空工程java
注意:這裏選擇API 16,由於Unity支持的最低是API 16android
(2)建立一個新的模塊app
依次選擇,File > New > New Module,而後選擇Android Library函數
保證最小API等級爲16佈局
(3)建立一個Activity字體
建立好後,默認生成了一個xml佈局,刪除掉,咱們的佈局是unity控制的ui
(4)切換到Project下,導入Unity支持包debug
Unity支持包在Unity安裝目錄下:G:\unity2017.1.1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar3d
複製以上目錄下的classes.jar,粘貼到libs文件夾下
粘貼進去後,把這個包添加到當前模塊中去
(4)切回到Android下,打開AndroidManifest.xml,這至關於一個Android清單,告訴Android咱們的程序都有哪些東西,每一個頁面都是幹嗎的,還能配置一些權限。要擴展Unity的MainActivity,先改這個
修改方法:將app文件夾下的AndroidManifest.xml的這部分複製過來,而後刪掉紅色報錯部分
修改label,之後安裝到手機就是這個名字
標識Activity的類型是Unity用的,加上下面的代碼:
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
修改MainActivity.java
(5) 提供一個方法給Unity,這裏提供了一個簡單的加法運算
在java中寫好這個方法後,要提供給Unity使用,先作出這個模塊
切換到Project,依次打開testlibrary > build > intermediates > bundles(老版本是這個,新版本是packaged-classes) > debug > libs下的jar包
刪除這個包,將debug目錄下與libs文件夾同層的包拷貝進來
把這個libs文件夾複製到桌面備用,而後把與libs文件夾同層的res文件夾也複製到桌面備用。可是新的版本的res文件夾是沒有的,找了下,也是在文件夾packaged-classes下面
而後把這個xml複製到桌面備用
打開這個xml,修改這個名字爲本身須要的名字,注意所有小寫
(6) 在Unity中使用這個方法
建立好工程,設置爲Android打包,設置包名,包名爲上面xml中咱們修改的那個
建立文件夾Plugins及其子文件夾Android(注意:這兩個文件夾名字是固定的),將複製到桌面上的3個東西拷貝進去
建立一個腳本掛在相機上,在這裏咱們使用Unity來調用Android那邊提供的add方法,而後把結果顯示在Text組件上。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Test : MonoBehaviour { public Text text; void Start () { // 得到位於com.unity3d.player包下的UnityPlayer類 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); // 得到jc所表明的類下的currentActivity對象 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); // 調用Android提供的Android方法 // 使用Call調用,<>表示有返回值,沒有返回值則不須要這個 text.text = jo.Call<int>("add", 2, 3).ToString(); } }
數據線鏈接手機,打包,能夠看到結果
(7)上面是在Android中定義了一個方法,在Unity中調用。如今咱們在Unity中定義一個方法,在Android中調用。
定義一個簡單的方法,改變字體的顏色。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Test : MonoBehaviour { public Text text; void Start () { // 得到位於com.unity3d.player包下的UnityPlayer類 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); // 得到jc所表明的類下的currentActivity對象 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); // 調用Android提供的Android方法 // 使用Call調用,<>表示有返回值,沒有返回值則不須要這個 text.text = jo.Call<int>("add", 2, 3).ToString(); } public void ChangeColor() { text.color = Color.red; } }
在Android中調用,使用方法:
UnityPlayer.UnitySendMessage("Main Camera","ChangeColor","");
第一個參數表示腳本所掛載的位置,第二個參數表示函數名,第三個參數表示參數
從新Build,導出libs和res文件夾,替換Unity下對應文件夾,而後從新打包運行,結果: