使用的交互方式是AAR
新建Androidstudio工程
先选择 新建工程的Edit 选择修改包名
新建Unity端
比较重点注意的我会标注出来
这个标注的Script Backend 决定了再安卓端要使用的jre是什么文件夹下的
中间有很多坑 都是慢慢趟出来的 当前的Unity版本是2018.4.0 新建Unity确认包名 添加Plugins文件夹再在Plugins文件夹内创建Android文件夹 Unity 端暂时告一段落
确认好包名以后继续创建工程 Androidstudio工程
5,完成以后等待编译 编译完成以后接着新建module File->New->New Module..
8,修改包名和Library名字
9,等待编译完成 点击选择 Project 这个就是刚才创建的labrary
10,最重要的一步 就是上面提到的Script Backend 如果是mono 倒入 Unity的jar包的时候就要选择mono 入股是il2cpp 就选择il2cpp下面的jar 。Unity jar 包 路径 在 Unity安装路径,Editor-->Data-->PlaybackEngines-->AndroidPlayer-->Variations-->mono/il2cpp(这里根据你的unity编译类型来选择)-->Release-->Classes
把这个复制 粘贴到刚才项目的 libs下
11,选择AandroidStudio 的File下Project Structure 选择刚才新建的labrary 也就是andunitytest 再选择Dependencies 选择+号 选择 Jar dependency
选择刚才倒入的Unity的jar 选择ok
Scope 选择 什么还是待定 因为这个是Unity 新出的 以后导出aar以后还要删除Libs下面的jar 英 (目前打包的时候会打包libs 和文件夹下的 jar 为了提前不导出还要设置一步 参考下一篇博客)
然后选择ok
12,先选择安卓模式 找到对应的library 新建一个空的界面
13,复制App下面的AndroidManifest文件的application内容到andunitytest的AndroidManifest 这时候会有很多错误 我们慢慢解决
鼠标右键选择打开 Res
打开随便复制 命名mipmap 然后复制到刚才的res下 也是右键打开
然后添加
14,打开刚才新建的MainActivity
修改代码
package com.shiyuan.unityandandroidinteractive;
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);
}
public int UnityCAndroid(int a ,int b){
//调用Unity中的函数 显示安卓这边调用成功
//1Unity该函数所在地脚本所挂的物体 方法名 要穿的参数
UnityPlayer.UnitySendMessage("GameRoot","AndroidCUnity","Hi~ I am Android");
return a+b;
}
}
我看别人说还要注释这个
然后
运行完成以后生成的aar包
然后把aar复制到Unity工程的路径 然后再把androidmanifest 复制出来一份 (如果要设置刚才那个博客的 打包不出来libs文件夹 就不用删除了)
再删除libs下面的 jre
修改拖出来的androidmanifest
15,编写Unity代码
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
public Text _inttext, _stringText;
public void OnCkick()
{
AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ac = javaClass.GetStatic("currentActivity");
int a = ac.Call("UnityCAndroid", 12, 16);
_inttext.text = a.ToString();
}
public void AndroidCUnity(string a)
{
_stringText.text = a;
}
}
先介绍一下u3d中调用android的一些API
UnityPlayer是unity3d自身的一个jar包,两端通信的关键,
currentActivity是android需要的上下文,这两个东西你可以当作是调用某些android方法需要的参数,记下就行
AndroidJavaClass ajc=new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject ajo=ajc.GetStatic(“currentActivity”);
jo.Call(method ,parameter );//调用实例方法
jo.Get(method ,parameter );//获取实例变量(非静态)
jo.Set(method ,parameter );//设置实例 变量(非静态)
jo.CallStatic(method ,parameter );//调用静态变量(非静态)
jo.GetStatic (method ,parameter );//获取静态变量
jo.SetStatic (method ,parameter );//设置静态变量
然后 代码挂载canvas上 canvas名字改为GameRoot
然后打包Apk 安装在手机