unity android如何自动识别AAR包 unity调用aar

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

一,AndroidStudio打包出aar包

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

unity android如何自动识别AAR包 unity调用aar_unity

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

unity android如何自动识别AAR包 unity调用aar_unity_02

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

unity android如何自动识别AAR包 unity调用aar_右键_03

unity android如何自动识别AAR包 unity调用aar_android_04

unity android如何自动识别AAR包 unity调用aar_android_05

4.建立完成之后,可以在左侧Project视窗中看见,如果找不到对应文件夹,可以把上方改成Project

unity android如何自动识别AAR包 unity调用aar_android_06

5.我们再建立一个Module,类型选择Import.JAR/.AAR,选择Unity安装包里的classes.jar,路径Unity\20194.0\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes。我的已经复制到D盘里了。

unity android如何自动识别AAR包 unity调用aar_android_07

unity android如何自动识别AAR包 unity调用aar_右键_08

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

unity android如何自动识别AAR包 unity调用aar_右键_09

unity android如何自动识别AAR包 unity调用aar_unity_10

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

unity android如何自动识别AAR包 unity调用aar_unity_11

unity android如何自动识别AAR包 unity调用aar_java_12

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

unity android如何自动识别AAR包 unity调用aar_java_13


代码块

登录后复制


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

unity android如何自动识别AAR包 unity调用aar_安卓_14

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

unity android如何自动识别AAR包 unity调用aar_unity_15

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

unity android如何自动识别AAR包 unity调用aar_java_16

二,Unity调用aar

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

unity android如何自动识别AAR包 unity调用aar_安卓_17

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

unity android如何自动识别AAR包 unity调用aar_android_18



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

注意该图和代码块的内容不完全一样,依照代码块代码复制

unity android如何自动识别AAR包 unity调用aar_右键_19


代码块

登录后复制


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里的“获取亮度成功”,可自定义做测试,测试该方法是否执行

unity android如何自动识别AAR包 unity调用aar_右键_20

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


             

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空