Unity3d与Android交互总结

原创 2016年05月30日 22:59:46

在网上找了很多教程,基本上使用的方法都是在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环境和unity(或者操作系统)是不同版本的,一个是32位一个是64位)

如….

也试过用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.网上大部分教程都使用的:

if(GUILayout.Button("test",GUILayout.Height(100)))
{
     AndroidJavaClass java_class = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
      AndroidJavaObject java_object = java_class.GetStatic<AndroidJavaObject>("currentActivity");
     java_object.Call("AndroidFunction","teststring");
}

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

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

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

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

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

版权声明:可以转载,但请不要全部复制,加一点自己的实际体会或者优化方案好不好

相关文章推荐

Android与Unity交互研究

Android与Unity交互研究转载请注明出处:http://blog.csdn.net/crazy1235Android与Unity交互研究 unity与android交互的由来 unity简单介...

Android unity3d 交互传递消息

然后用Android studio运行起来,点击【调用Android方法】按钮,这个方法会被调用,并在屏幕上弹出一个Toast显示unity发过来的消息。

Android 4.0 横竖屏切换注意事项

==Android 2.3以前的横竖屏切换== 在Android 2.3平台上,我们可以需要设置界面的横竖屏显示时,可以在AndroidManifest.xml中,对Activity的属性添加以下代...

Unity3D与Android项目交互中无法监听back键返回的解决办法

这两天为解决unity3d与android项目整合中出现的无法监听真机back实体键的问题找了很多资料,网上也有很多人遇到了这个问题,但是似乎都没找到有效的解决方法。      实现的效果...

android与unity3d互相交互

请参看“Android和Unity3d互相调用的Demo”的资源 http://download.csdn.net/detail/the01hierarch/6311681  Unity for...

将Unity3D项目导出到Android工程中二次开发并实现之间的数据交互

将Unity3D项目导出到Android工程中二次开发并实现之间的数据交互

Android Unity3D 逆向截取交互事件(二) 之逆向修改dll并加入Java的接口

有需求是在完整的apk中截取Android Unity3D并暴露Java的接口。这次文章就是这方面实现的一个小例子。 首先反编译apk,把asserts/bin/manager 文件下的Unit...

Unity3D与Android,iOS交互

一. 写在前面最近由于业务需求,对Unity3D与Android,iOS平台交互有所了解,特此记录和分享。二. 准备工作1)我使用的Unity版本是4.6.3,eclipse+ADT开发环境,以及Xc...

Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

我们接着上一篇博客的内容,接着讲Android 和unity 的互动。上一篇我们讲到利用Android Studio 怎样创建一个工程,打包成ARR文件导入到Unity,在通过Unity打包成APK,...

Unity3D与Android(eclipse和AndroidStudio)交互问题

Unity 与Android的交互(Android studio) 1选择最低版本,我这里选择的是19,之后需要在Unity中修改为此包名和相同的最低版本。 2在Unity安装目录 Unity\...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)