【第22期】观点:IT 行业加班,到底有没有价值?

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)这一个方法而已。

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

相关文章推荐

将Unity3D游戏移植到Android平台上

有些东西还是需要备忘下,要不开始新的项目的时候有些东西真会想想不起来~

Unity在安卓平台的应用间跳转

本来没涉及过这个功能,而且不会安卓应用开发,有点方。求助同事以及度娘之后解决了。基本还是比较简单的。 基本unity调用安卓程序,首先需要新建或者打开安卓工程,导入unity的安卓包(或者本来就有,...

Unity集成内嵌网页插件-支持Android和IOS

本文所用到的插件,是修改自一个日本人keijiro的代码。他的源码地址为:https://github.com/keijiro/unity-webview-integration 为更易于使用,本插...

【Unity】游戏开发过程中的前后台切换技术

在有些场景中游戏是需要从前台切换到后台运行的,那么在开发过程中需要如何去实现这个功能呢,为了帮助大家,下面就给大家介绍下退后台的方法,不会的就一起来看看吧。      //simulateSwit...

unity开发android游戏(一)搭建Unity安卓开发环境

Unity3D 配置android开发、发布环境。

Unity开发Android游戏(二)Hello world!

在设置好开发环境后,我们开始编写一个最简单的程序,也就是hello world,并让它在手机上跑起来。 注:环境的搭建,可以看我的上一篇文章:《unity开发android游戏(一)搭建Unity安卓...

Unity3D Android 开发环境配置

1.安装Java JDK。 2.配置安装jdk环境。 1、在【我的电脑】上按右键,选择【属性】 2、选择【系统属性】面板上面的【高级】选项,然后选择下面的【环境变量】 3、在底部的【系统变量】列表中...

Unity3d和Android完美交互全过程,为您深度解析

开篇: 好多手机功能,Unity没有提供相应的接口,比如你想实现一个锁屏功能.. 开动脑筋?好的客官请往下看 这时候,我们就需要通过使用Android原生的ADT编辑器去...

教你怎样用unity3d发布一个Android的apk文件

初识unity3d已经有一段时间了。大约那是2012年的暑假。无意从手机上搜到了这个引擎。从今以后我就喜欢上他了。然后又从网上找了许多关于unity资料。一点点的积累,学习。  尤其是Android...

Unity3D 与 Android 交互

近来 在做AR 初次接触到 Unity3D ,C# 语言写的,也不是很懂 经过近2天的摸索,终于搞通了两者的交互,特整理此文,以备注 直接上代码     c#  void On...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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