参考文章,传送门

基于AndroidStudio3.5.2 ,比参考文章简单一点,导出不需要修改文件

本文章分为两部分: 一,AndroidStudio打包出aar包 二, Unity 调用aar包里方法

一,AndroidStudio打包出aar包

1.首先创建一个安卓项目,项目名和包名随意取,如果只是把某个功能嵌入到Unity里,不需要用到这两个,项目类型选择Empty Activity

在这里插入图片描述

2.建立完项目之后,要等待AndroidStudio加载完依赖项,才可以创建Module,在全部加载完成之前,New-Module按钮为灰色

在这里插入图片描述

3.等待加载完成之后,我们点击app右键建立一个Module,类型选择AndroidLibraly,此处名字要记住

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.建立完成之后,可以在左侧Project视窗中看见,如果找不到对应文件夹,可以把上方改成Project在这里插入图片描述
5.我们再建立一个Module,类型选择Import.JAR/.AAR,选择Unity安装包里的classes.jar,路径Unity\20194.0\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes。我的已经复制到D盘里了。

在这里插入图片描述在这里插入图片描述

6.完成之后我们点击上方菜单栏File-Project Structure按钮,选择创建的testunity添加ModelDependency,把unity 的classes.jar添加到我们的工程里

在这里插入图片描述
在这里插入图片描述

7.之后,我们在com.dongfu.testunity选中右键创建我们的代码类,new-java class

在这里插入图片描述在这里插入图片描述

8.以下是固定写法,实例化方便导入Unity后调用

在这里插入图片描述
代码块

package com.dongfu.testunity;
import android.app.Fragment;
import android.view.Window;
import android.view.WindowManager;

import com.unity3d.player.UnityPlayer;
public class MainActivity extends Fragment {

    private static MainActivity Instance = null;
    private static final String TAG = "MainActivity";

    public static MainActivity GetInstance() {
        if (Instance == null) {
            Instance = new MainActivity();
            UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG);
        }
        return Instance;
    }
    //以上都是固定写法
    //------------------------------------
    //自己写的方法放在下面,例如以下方法
    public void CallBack(String _obj, String _fun, String _val) {
        UnityPlayer.UnitySendMessage(_obj, _fun, "Android Callback " + _val);
    }
     /**
     * 获取应用亮度
     * */
    public  float getScreenBrightness( final String gameObject, final String callback) {
        float brightness;
        WindowManager.LayoutParams lp = UnityPlayer.currentActivity.getWindow().getAttributes();
        brightness= lp.screenBrightness;
        UnityPlayer.UnitySendMessage(gameObject,callback,"获取亮度成功");
        return brightness;
    }
}
9.以下是我做的项目里的两个方法,一个获取当前手机应用的亮度,一个改变当前手机应用的亮度,下面测试用getScreenBrightness获取当前手机亮度方法
/**
     设置亮度 0-1
     */
    public void SetBrightness(final String gameObject, final String callback, final float f){

        UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    UnityPlayer.UnitySendMessage(gameObject,callback,"安卓内亮度调节开始");
                    Window localWindow = UnityPlayer.currentActivity.getWindow();
                    WindowManager.LayoutParams params = localWindow.getAttributes();
                    params.screenBrightness = f;
                    localWindow.setAttributes(params);
                    UnityPlayer.UnitySendMessage(gameObject,callback,"安卓内亮度调节成功");
                }
                catch (Exception ex){
                    UnityPlayer.UnitySendMessage(gameObject,callback,ex.toString());
                }
            }
        });
    }
    /**
     * 获取应用亮度
     * */
    public  float getScreenBrightness( final String gameObject, final String callback) {
        float brightness;
        WindowManager.LayoutParams lp = UnityPlayer.currentActivity.getWindow().getAttributes();
        brightness= lp.screenBrightness;
        UnityPlayer.UnitySendMessage(gameObject,callback,"获取亮度成功");
        return brightness;
    }
10.这里说一下下面的方法,这个是为了在Unity里使用的回调函数,_obj是Unity里游戏物体的名字,_fun是Unity里方法的名字,_val是一个参数,public void CallBack(String _obj, String _fun) { UnityPlayer.UnitySendMessage(_obj, _fun, “现在这句话会在Unity里显示出来”)} 这个是必要的函数
public void CallBack(String _obj, String _fun, String _val) {
        UnityPlayer.UnitySendMessage(_obj, _fun, "Android Callback " + _val);
    }
11.功能代码写完后我们就可以打出aar包到unity里调用了,之后点开testunity文件夹下的build.gradle文件,我们在右侧Gradle界面,选中对应文件,右键-Refresh Gradle project

在这里插入图片描述

12.运行完成之后,原文件下方会出现一个单独的对应文件,选中新创建出来的testunity-testunity-Tasks-other- assembleRelease,右键选择run

在这里插入图片描述

13.运行完成后在文件夹build-output-aar-下面的aar文件即是要导入到unity里的aar文件,右键选中aar- copyPath 获取它的路径复制出来

在这里插入图片描述

二,Unity调用aar

1.将刚才的aar包导入到Unity里的Plugins/Android 文件下,如果没有这两个文件夹自己在unity里新建在放入

在这里插入图片描述

2.将其放入我们的Unity项目中,新建一个text脚本做测试

在这里插入图片描述

3.下面编辑test脚本内容,完成Unity调用aar包里 的获取亮度的方法

注意该图和代码块的内容不完全一样,依照代码块代码复制
在这里插入图片描述
代码块

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class test : MonoBehaviour
{
    public Transform TexTransform;
    private float floatLight;//获取的当前的亮度
    void Start()
    {
        SettLightValue();
    }
    private void SettLightValue()
    {
        string className = "com.dongfu.testunity.MainActivity";
        var javaObject = new AndroidJavaClass(className);
        var a = javaObject.CallStatic<AndroidJavaObject>("GetInstance");
        Debug.LogError(a);
        //getScreenBrightness2:安卓aar包里方法名 / movieRImg:Unity挂载该方法的GanmeObject / TestCallBack:aar包里的回调函数
        floatLight = a.Call<float>("getScreenBrightness", "movieRImg", "TestCallBack");
    }
    //回调函数 参数str就是安卓里的方法里的字符串"获取亮度成功"
    void TestCallBack(string str)
    {
        TexTransform.GetComponent<Text>().text = str+"/"+ floatLight;
    }
}
4.注意回调函数的名称两个要一样,里面的str就是java里的“获取亮度成功”,可自定义做测试,测试该方法是否执行

在这里插入图片描述

5.注意,在Unity 里直接运行会报错,找不到实例,因为电脑不是安卓系统,直接打包出App在手机上即可完美运行

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐