目录
准备工作
1.确定unity使用的版本,在unity安装路径复制classes.jar(确保unity安装安卓平台模块,不然你找不到)
unity安装路径+\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
Android studio部分
2.在Android studio新建工程,再新建模块,把unity的classes.jar复制到libs下面,右击 As library
3.新建空activity,继承UnityPlayerActivity ,注释掉setContentView
package com.xhsj.mylibrary;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
}
public static int add(int a,int b){
return a+b;
}
public static void AndroidCallUnity(String objName,String method,String args){
UnityPlayer.UnitySendMessage(objName,method, args);
}
}
4.修改AndroidManifest,设置package,增加启动权限,增加meta-data
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xhsj.mylibrary"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="29" />
<application
android:allowBackup="true"
android:supportsRtl="true" >
<activity android:name="com.xhsj.mylibrary.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="unityplayer.UnityActivity"
android:value="true" />
</activity>
</application>
</manifest>
5.build 模块
6.在对应模块下面找build/outputs/aar
把aar文件修改后缀名 .rar或者.zip;或者右键修改打开方式为winrar或者其他压缩文件阅读器
7.新建一个Android文件夹,把aar文件中的有用文件拿出来,备用
AndroidManifest.xml文件
res文件夹
新建libs文件夹,把aar中的classes.jar拿过来,arr/libs中classes.jar(unity的那个,可以用解压缩 文件查看)删除,如果引用了其他jar包也要拿过来
unity部分
8.在根目录创建Plugins文件夹,把刚准备的Android文件夹复制在下面
9.unity调用安卓
AndroidJavaObject jo;
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
num = jo.CallStatic<int>("add", num, 1);//带返回值
多参数调用
string[] array = new string[3];
array[0] = "Canvas";
array[1] = "TTT";
array[2] = "22222";
jo.CallStatic("AndroidCallUnity", array);
10.安卓调用unity
UnityPlayer.UnitySendMessage(objName,method, args);
第一个参数是unity场景的物体名,不是类名,也不是脚本的名字,这个容易弄错了
第二个参数是unity方法名
第三次参数是自己定义的参数