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 获取它的路径复制出来
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在手机上即可完美运行
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删