問題描述
Unity和安卓手機進行交互,是我們開發游戲中最常見的場景。本教程將從一個簡單的例子來演示一下。
本教程需要用到Android Studio2021.1.1
1.Android Studio新建一個工程
2.選擇Empty Activity 然后點擊Next
3.點擊Finish完成創建
4.選擇File-New-New Module
5.創建一個Android Library
這個就是用來生成一個jar包的
5.創建成功后,會看到剛剛創建的mylibrary和下面的build.gradle
不同視窗排版不一樣,自己調整一下
6.找到Unity的classes.jar,在安裝目錄下
比如我的目錄:C:\Program Files\Unity\Hub\Editor\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes
注意選擇自己需要的版本
7.拷貝到Android Studio項目中的Libs下
8.右鍵選擇Add As Library
9.在src的main目錄下,右鍵新增一個JavaGame腳本
10.加入以下測試腳本
package com.hao.mylibrary;
import android.util.Log;
import com.unity3d.player.UnityPlayer;public class JavaGame
{//初始化public static void Init(){// 打印: JavaGame: InitLog.d("JavaGame", "Init");}//獲取渠道private String GetChannel(){Log.d("JavaGame", "GetChannel");return "xiaomi";}//加法public int Add(int num1,int num2){Log.d("JavaGame", "Add");return num1 + num2;}//登錄public static void Login(){// 打印: JavaGame: LoginLog.d("JavaGame", "Login");UnityPlayer.UnitySendMessage("UnityObj", "LoginSucceed", "abc12345");}
}
11.打開build.gradle,添加以下打包代碼
task makeJar(type: Copy) {//刪除存在的delete 'build/libs/testlibrary.jar'//設置拷貝的文件from('build/intermediates/aar_main_jar/release/')//打進jar包后的文件目錄into('build/libs/')//將classes.jar放入build/libs/目錄下//include ,exclude參數來設置過濾include('classes.jar')//重命名rename ('classes.jar', 'testlibrary.jar')}makeJar.dependsOn(build)
12.在右側找到Gradle,選擇項目中的Tasks - other - makeJar,雙擊makeJar開始打包
13.提示打包成功后,可在Build中的Libs下找到jar包
14.拷貝到Unity工程Plugins/Android目錄下
15.在Unity里新建一個Game.cs腳本,加入以下測試代碼
using UnityEngine;
using UnityEngine.UI;
public class Game : MonoBehaviour
{public Text ChannelText;public Text AddText;void Start(){AndroidJavaObject javaObject = new AndroidJavaObject("com.hao.mylibrary.JavaGame");// 靜態方法javaObject.CallStatic("Init");// 非靜態無參方法,返回一個渠道名string Channel = javaObject.Call<string>("GetChannel");ChannelText.text = Channel;// 非靜態,帶參數方法int num = javaObject.Call<int>("Add", 2,6);AddText.text = num.ToString();//調用登錄,登錄成功會返回javaObject.CallStatic("Login");}
}
16.在Unity里新建一個UnityObj.cs腳本,并且掛在 UnityObj對象上 。
UnityObj必須要和java里的名稱一致,不然Unity就接收不到java的返回
using UnityEngine;
using UnityEngine.UI;
public class UnityObj : MonoBehaviour
{public Text mText;private void LoginSucceed(string value){mText.text = value;}
}