unity与android交互总结

在网上找了很多教程,基本上使用的方法都是在eclipse上新建普通android工程,让主activity继承UnityPlayerActivity,然后在该activity中写供unity调用的接口或者主动要回调unity的接口,然后导出jar包到unity。

这种方式只要人品不好就会出一堆乱七八糟的问题:

  如新建工程时选择SDK版本小于4.0时在unity build APK时报错,因为style.xml就不会有parent="Theme.AppCompat.Light,而是parent="android:Theme.Light";

  如成功在unity打包出apk后运行时根本进不了unity中的场景内容而是直接进入了android中的activity

  如....

也试过用android studio,以为官方的东西可能靠谱一些,结果发现android studio不能直接导出jar包,需要新建library再修改配置发布文件等等多个复杂步聚……最终生成jar包了,然并卵,仍然不能使用,貌似生成的jar包内容不对,遂放弃,不想继续研究了,也许是我方法出错……

以下是我认为最靠谱省事的办法:

  1.unity中新建空项目。

  2.选择导出android工程。

  3.用eclipse打开该工程(若已有需要接入的android工程则进行合并),在eclipse中开始写接口。

  4.接口完成后右键点击src目录Export->Java->JAR file导出jar包,注意只需要导出src目录中的东西就可以了,不要加入其它没用的东西(有第三方插件时可能需要打包插件相关的东西)。

  5.回到unity,在Project中新建plugins/Android(unity5.x以前版本必须是该目录结构)目录,将上一步导出的jar包放进该目录中(最好再建个bin目录,放到bin中),另外将android项目中的AndroidMainFest.xml也复制到Android下(有第三方插件时res整个目录也需要复制)。

  6.接下来就可以在unity中自由使用刚做好的android插件吧!

这种方式导出的android工程省去了手动去unity安装路径中去寻找并导入class.jar及Bundle Identifier要与unity保持一致等问题。

接下来说说unity调用android接口的两种方式:

1.网上大部分教程都使用的:

1 if(GUILayout.Button("test",GUILayout.Height(100)))
2 {
3      AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
4       AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
5      jo.Call("AndroidFunction","teststring");
6 }

这种方式需要修改android主activity让其继承UnityPlayerActivity,通过获得的jo调用该activity中的各种接口。

2.在android工程中不修改任何代码,直接在src中新建普通class(当然也可以放在新建的包中),不需要继承任何类,直接写入你需要提供给unity调用的接口,后面unity调用方式如下:

1 if(GUILayout.Button("test",GUILayout.Height(100)))
2 {
3      AndroidJavaClass jc = new AndroidJavaClass("com.package.package.YourNewClass");
4      //或者AndroidJavaObject jo = new AndroidJavaObject("com.package.package.YourNewClass");
5      jc.CallStatic("AndroidFunction","teststring");
6      //或者jo.CallStatic("AndroidFunction","teststring");
7      //方法无论是public还是private都可以调用到,如要调用非static的方法则只能使用jo
8 }

当你有多个插件SDK需要接入时就可以分别写在不同的类中,以降低偶合。当然如果SDK有UI交互则仍是需要activity的。

至于android回调unity则没啥好说的,只有UnityPlayer.UnitySendMessage("TestGameObject", "Func", str)这一个方法而已。

时间: 2024-10-12 09:04:16

unity与android交互总结的相关文章

unity与android交互

网上大多数都是把android的工程放到unity里来打包成.apk.但是我感觉那样不好,因为我延用了ios的思想,unity和ios交互是使用unity导出xcode工程进行二次开发,其实unity也可以导出eclipse进行二次开发,我用的版本是unity4.3,我记得之前我用4.0导出eclipse工程会生成三个.java脚本,现在只生成一个,UnityPlayerNativeActivity,不过这个类往上继承两层也是UnityPlayerActivity,都一样一样的,只能说4.3更简

Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作

刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息            使用的Unity版本为5.5,Androad Studio 2.3.1 接下来开始讲具体操作 首先是Androad Studio的基本配置 1.创建工程,空白的就行,反正也用不到界面布局 等待创建完成 2.新建库模块: 切换到Project视图 右击你的项目 新建一个库模块-用来负责与Unity交互 当然你也可以不

unity和Android交互

最近在接触unity.对于unity和Android的交互,网上找了好多,大多都是一种方式,下面就说一下我使用后的心得. 首先: unity调用Android, unity代码: AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentA

Unity 和android 交互 记录

参考文章 http://www.jianshu.com/p/c06063a403c6 趟坑如下 icon 冲突问题: 设置不了unity icon,显示的是默认的 android 小人 解决方法: 在 AndroidManifest.xml 文件添加/修改  android:icon="@drawable/app_icon", 如图:

unity 与android交互

使用eclipse新建一个Android应用工程,在新建的过程中,使得这个工程的包名和Unity工程的包名一致,我选的android版本为4.x.unity 的版本是5.4.1 然后就是要将unity的java包导入到android工程中 再后面就是导出jar包了 导出之后将jar包放入unity,也要把android工程中的res文件夹整个放入unity,下面是具体的步骤: 如何在代码中调用java的代码 以上就是所有的步骤了.希望可以帮到大家

unity与iOS、Android交互

1.Unity调iOS的方法 在首页的viewcontroller里面实现方法 void _PressButton3(const char *args) { //  UnityAppController *unityapp = (UnityAppController *)[UIApplication sharedApplication].delegate; // [unityapp ShowWindowssubview]; } 在Unity里面 直接调用 _PressButton3(conten

Unity调用Android的Activity

之前http://shuxiayeshou.blog.51cto.com/4452347/1932216 写了关于Unity与Android结合所遇到的问题及解决方法 总结一下,Unity做一个简单的场景,AndroidStudio建一个简单的项目,其中MainActivity是要继承自 UnityPlayerActivity的,这样Unity程序可以调用Android端MainActivity的方法了 那如果Android项目中还有一个NewActivity,我们要通过Unity把他打开咋办呢

Unity在Android和iOS中如何调用Native API

本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调用.利用这一特性,可以扩展unity的功能.例如集成和调用第三方库.同时为了满足对unity接口的一致性,可以考虑在android和iOS上提供相同的接口供C#调用. 这里列举以下两个例子. 1. 1. 以弹出一个覆盖部分屏幕的webview为例来说明如何从C#调用Native接口. 2. 2. 简

unity导出android遇到的build target 错误详解

1. 导出运行后显示build target ="9",version is wrong ,can't  loaded xxx.untiy3d files 之类的,一般情况看导出的jar包内的project.properties中target 是否正确,改正后而且要clean相关项目. 2.看AndroidManifest.xml下    android:minSdkVersion和android:targetSdkVersion 是否正确,改正后refresh 3.看报错信息是否提示