Unity与Android Studio交互的实现

在使用Unity开发功能的时候,有时会需要调用android原生的功能,这时就要用Android Studio打包出插件放到Unity工程中。

一、开发工具

1.Unity 2018.4.23f1
2.Android Studio 3.5.2
(不同的版本和操作系统的操作方式几乎相同,只是界面选项有些许不同。)

二、开发流程

Android Studio创建library -> Android Studio导出arr文件 -> arr文件移至Unity并解压设置位置 -> c#中实现功能 -> Unity打出Android包并测试

三、开发步骤

1. 创建工程

unity与android交互退出unity unity android 交互_Android


unity与android交互退出unity unity android 交互_jar_02


unity与android交互退出unity unity android 交互_android_03

2.创建Module

unity与android交互退出unity unity android 交互_android_04


unity与android交互退出unity unity android 交互_jar_05


unity与android交互退出unity unity android 交互_jar文件_06

3.导入Unity中classes.jar文件

切换到Project面板

unity与android交互退出unity unity android 交互_jar文件_07


找到当前Unity版本的classes.jar,Windows的路径当前Unity版本\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes

unity与android交互退出unity unity android 交互_unity_08


把classes.jar文件拷贝到libs文件夹下,并设置成library,用于导入。

unity与android交互退出unity unity android 交互_Android_09


unity与android交互退出unity unity android 交互_android_10

4.编辑代码

在自己创建的工程名称下创建空的Activity。

unity与android交互退出unity unity android 交互_jar文件_11


unity与android交互退出unity unity android 交互_android_12


编写代码,注意红框中的内容,这里只写了一个简单的返回文字的方法。

unity与android交互退出unity unity android 交互_Android_13

5.设置AndroidManifest

只需要设置自己创建的文件夹下的AndroidManifest。

unity与android交互退出unity unity android 交互_unity_14

6.打包Android Studio

构建自己创建的模块。

unity与android交互退出unity unity android 交互_Android_15


构建完成后,切换至Project面板,找到arr文件并复制。

unity与android交互退出unity unity android 交互_unity_16

7.导入Unity

创建Unity工程,在Assets文件夹下创建Plugins文件夹,再创建子文件夹Android,arr文件粘贴到该文件夹下。

unity与android交互退出unity unity android 交互_android_17


更改arr文件的后缀名为zip,并解压缩。

unity与android交互退出unity unity android 交互_android_18


删除libs文件夹下的classes.jar文件,防止与另一个classes.jar发生冲突。

unity与android交互退出unity unity android 交互_jar文件_19


删除不必要的文件,只保留这两个文件即可。

(注意这两个文件一定要放在Android文件夹下面,不可以再包一层父文件夹)

unity与android交互退出unity unity android 交互_unity_20

8.编写c#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{

    public Text txt;
    private AndroidJavaObject jo;

    private void Awake()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }

    void Start()
    {
        txt.text = jo.Call<string>("returnMessage");
    }
}

一定要注意AndroidJavaClass和AndroidJavaObject,编写完成后打包测试,text的内容为“Android Studio Message”;