问题描述
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.加入以下测试脚本
java
package com.hao.mylibrary;
import android.util.Log;
import com.unity3d.player.UnityPlayer;
public class JavaGame
{
//初始化
public static void Init()
{
// 打印: JavaGame: Init
Log.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: Login
Log.d("JavaGame", "Login");
UnityPlayer.UnitySendMessage("UnityObj", "LoginSucceed", "abc12345");
}
}
11.打开build.gradle,添加以下打包代码
java
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脚本,加入以下测试代码
csharp
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的返回
csharp
using UnityEngine;
using UnityEngine.UI;
public class UnityObj : MonoBehaviour
{
public Text mText;
private void LoginSucceed(string value)
{
mText.text = value;
}
}