赞
踩
主要有三种方法: 一下生成插件方法基于android studio(eclipse自行测试原理是一样的)
1:在MainActivity 中扩展方法
2:在安卓中导出一个插件Plugins 导出jar包 aar包
3:C#调用原生java方法
这三种方法中调用 unity 安卓交互方式是一样的只是生成的插件形式不一样 这里先简单介绍交互方式。下面也有一起介绍
1:unity 调用 安卓里面的方法接口
//获得位于com.untiy3d.player 包下面的类
AndroidJavaClass jc = new AndroidJavaClass("com.untiy3d.player.UnityPlayer");
//获取这个类里面的 currentActivity对象
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ddd") --没有返回值 第一个参数是android里面写的方法名 后面参数是 函数参数列表
jo.Call<int>("add",4,5); --有返回值 <返回值类型>
2:android 中是一个 静态方法
public static int add(int a,int b)
{
}
//获得test 类 包名+类名
AndroidJavaClass jc = new AndroidJavaClass("com.temp.ee.SimpleClass.Test");
jc.CallStatic<int>("add",1,2) 类直接调用函数
3:Android调用Unity
1: 在untiy C# 写一个公共方法 ChangeColor()
2:在android MainActivity中 修改方法
public int add (int a,int b)
{
//Main Camera 脚本挂在哪个游戏物体上 ChangeColor函数名称 "" 参数 没有就是空字符串
UnityPlayer.UnitySendMessage("Main Camera","ChangeColor","")
}
1:创建一个android 空工程
2:File ->New ->NewModule ->Android Library ...
3:在工程目录 java 第一个创建文件夹 创建-》New-》EmptyActivity 创建
4:删掉layout activity_main.xml 然后再 MainActivity 里面OnCreate删除 setContentView(R.layout.activity_main)
5:导入 unity 安装目录-》Editor->Data->PlaybackEngines->AndroidPlayer->Variations->mono->Release->Classes-》classes.jar
到项目工程 libs文件夹下 点击classes.jar右键 -》Add As Libray 添加到当前项目工程 包可展开看见里面的东西就是导入成功
6: 项目工程 -》manifests 文件夹 -> AndroidManifest.xml(安卓的一个清单 配置一些权限,页面配置等)
7:MainActivity 继承extends UnityPlayerActivity
8:写方法
9:选择当前工程文件 Build-》Make Module "testProject"(工程名) 开始编译
10:编译完成 -》工程目录-》Build -》intermediates->bundles->debug->
debug 文件夹下的->libs文件夹下->classes.jar 删除(因为这个是从untiy 复制过来的)把debug文件夹下的classes.jar复制到libs文件夹下(刚刚扩展的)
把libs 和res文件夹复制出来备用
11:然后再找到Build -》intermediates->manifests ->androidMainfest.xml (注意改里面的包名和unity包名一致) 复制出来备用
12:创建untiy工程+选择安卓平台 ,填写和androidmainfest.xml一样的包名
13:在assest文件夹下创建Plugings->Android (最后把刚刚的libs +res +AndroidManifest拖入到android文件夹下)
14:使用 Unity 调用安卓 AndroidJavaClass 可以调用anndroid里面的一个类 (填写类的包名)
//获得位于com.untiy3d.player 包下面的类
AndroidJavaClass jc = new AndroidJavaClass("com.untiy3d.player.UnityPlayer");
//获取这个类里面的 currentActivity对象
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("ddd") --没有返回值 第一个参数是android里面写的方法名 后面参数是 函数参数列表
jo.Call<int>("add",4,5); --有返回值 <返回值类型>
1:选择当前工程文件 Build-》Make Module "testProject"(工程名) 开始编译
2:当前工程文件 Build-》outputs->arr文件夹-》testProject-debug.aar包 拷贝到桌面上 (其实是一个zip的压缩文件)
3:AndroidManifest.xml 复制一份
4:使用压缩文件打开 但是不解压 (其实还是帮我们做好的jar)在libs下面的classes.jar 使用最外面一层的classes.jar 替换掉
5:把 复制 的AndroidManifest.xml放到Unity工程android 里面
6:修改压缩文件下的AndroidManifest.xml 下面的删除掉(会和放在untiy里面的冲突)包名不用改
<application>
android:icon = "@mipmap/icon" --app图片
android:label = "unity/testLibray" --app手机显示名字
</application>
修改完再放到压缩文件下
7:untiy里面的 AndroidManifest.xml 需要和unity 包名一样 并且更改 图标和名字
8:复制两个文件 aar+AndroidManifest.xml 到unity
1:创建一个新的工程 + EmptyActivity
2:File ->New ->NewModule ->Android Library ...(SimpleClass)
//这个是为了安卓调用unity 而做的,如果不在安卓里面调用unity 就不用做
3:导入 unity 安装目录-》Editor->Data->PlaybackEngines->AndroidPlayer->Variations->mono->Release->Classes-》classes.jar
到项目工程SimpleClass libs文件夹下 点击classes.jar右键 -》Add As Libray 添加到当前项目工程 包可展开看见里面的东西就是导入成功
4:SimpleClass->Java->右键 New ->JavaClass -》类名 写公共方法
5:选择当前工程文件SimpleClass Build-》Make Module "SimpleClass"(工程名) 开始编译
6:选择jar包 编译完成 -》工程目录-》Build -》intermediates->bundles->debug->debug 文件夹下的->classes.jar (这个时候选择的是直接外面的classes.jar)
7:classes.jar 直接复制到Unity 工程Android 文件夹下 (名字是随便更改 test)
8:使用 直接生成一个类的对象
//需要给构造方法填参数的话就要在后面添加参数 否则默认的构造方法
AndroidJavaObject jo = new AndroidJavaObject("com.temp.ee.SimpleClass.Test") java类的包名.Test类名
jo.Call<int>("add",1,3) 调用是一样的
因为untiy 发布的工程会包含androidSdk 所以androidSdk的原生方法可以用
1:调用android的log.e() 方法 先找到所在的包和类
2:使用方法
AndroidJavaClass jc = new AndroidJavaClass("android.util.Log");
jc.CallStatic<int>("e","UnityAndroidTest","ErrorTest");
在untiy 页面显示一个 android 文本框
//先找到android 方法的包和类名
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer") //Activity
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")
AndroidJavaClass toast = new AndroidJavaClass("android.widget.Toast");
//获得当前上下文
AndroidJavaObject context = currentActivity.Call<AndroidJavaObject>("getApplication")
//runOnUiThread android ui 线程
currentActivity.Call("runOnUiThread",new AndroidJavaRunable(()=>{
//匿名方法 LENGTH_LONG
toast.CallStatic<AndroidJavaObject>("makeText",context,"Send From Unity",toast.GetStatic<int>("LENGTH_LONG")).Call("Show")
}));
//C# 调用安卓接口
先定义一个内部类 继承 AndroidJavaProxy
class DateCallBack:AndroidJavaProxy
{
//指定这个类模拟 OnDateSetListener 接口 android.app.DatePickerDialog包名类名 +$+ 接口名
public DateCallBack():base("android.app.DatePickerDialog$OnDateSetListener")
{
}
void onDateSet(androidJavaObject view,int year,int month,int dayofmonth)
{
}
}
接入一个SDK 首先要看官方demo 后面就是在安卓里面写方法接口 到unity 里面去用
1:官网下载注册
2:同上创建新工程
3:File ->new -> import Module ->选择资源文件 (有的xfTest->speechDemo ->build.gradle 修改平台可能android平台版本不符报错)
开始接入
1:File ->New -> New Module ->Android Library
2:把讯飞语音 msc.jar 复制到 libs下 unity 的Classes.jar 复制 跟上面是一样的原理 右键add as library
3:检查依赖是否导入 右键工程文件名 -> Open Module Settings
4:在工程文件 ->src->main->创建一个新的文件夹 jniLibs 把 现在的SDk工程文件 中libs 下的armeabi-v7a拷贝过去 在用到的SDK里面的类或者工具类等没有的时候直接从Demo工程目录里面拷贝到对应目录就行
5:工程文件-》java->第一个文件创建 New ->Activity ->EmptyActivity
6:删掉layout activity_main.xml 然后再 MainActivity 里面OnCreate删除 setContentView(R.layout.activity_main)
8: 项目工程 -》manifests 文件夹 -> AndroidManifest.xml(安卓的一个清单 配置一些权限,页面配置等)
9:MainActivity 继承extends UnityPlayerActivity
10:初始化语音引擎 自己写一些公共函数给unty 用 或者在这边的回调函数里面回调untity 里面写的方法 对应SDk 里面的方法都有或者百度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。