已有Android工程集成Unity工程

来源:互联网 发布:网络攻防 编辑:程序博客网 时间:2024/05/27 10:42

前言

最近项目有个需求,将Unity工程集成入甲方的Android App中,网上看了一些资料,但大多都是过期的操作,也少有提及如何从Unity跳转回Android App,或者提及的方法是先在Android中写方法,然后导出jar包到Unity中再调用,我感觉应该不用这样繁琐,本文记录下我研究的过程,因为我之前完全未涉及Android开发,所以这里的方式未必好,仅提供参考。

开发环境

Unity 5.6.1(64位)
Android Studio 3.0

正文

一、搭建Android App工程
因为之前完全未涉及Android开发,所以先跟着官方网站的基础教程(需要翻墙打开)做了一个简单的App,这个App有两个Activity:MainActivity和DisplayMessageActivity,功能为前者页面中输入文字,点击”Send”按钮,便打开后者并显示输入的文字内容。
MainActivity:
这里写图片描述

DisplayMessageActivity:
这里写图片描述

二、制作Unity工程
简单起见,仅实现点击屏幕,Cube便显示在点击位置的功能,核心代码如下:

void Update () {#if UNITY_STANDALONE_WIN || UNITY_EDITOR        if (Input.GetMouseButton(0))        {            transform.position = cam.ScreenToWorldPoint(Input.mousePosition + vec);        }#elif UNITY_ANDROID || UNITY_IOS        if (1 == Input.touchCount && Input.GetTouch(0).phase == TouchPhase.Ended)        {            transform.position = cam.ScreenToWorldPoint(Input.mousePosition + vec);        }#endif    }

其中vec值是(0,0,10),也就是z轴加了一个离摄像机的距离,不然Cube会出现在摄像机的位置,显示结果就是Cube消失了。

三、集成
1.Unity导出安卓工程文件
注意PlayerSettings中PackageName必须与Android App一致,然后BuildSettings中切换到Android平台,设置Build System为“Gradle”,勾选”Export Project”,点击”Export”。
这里写图片描述

导出后的工程根目录如下:
这里写图片描述
内部文件目录为:
- libs/unity-classes.jar
- src/main/assets
- src/main/java
- src/main/jniLibs
- src/main/res
- src/main/AndroidManifest.xml

2.拷贝文件到Android工程
- 将libs/unity-classes.jar文件拷贝至app/libs目录下,并右键点选”Add as Library”;
- 将src/main/assets整个目录拷贝至app/src/main目录下;
- 将src/main/java最终子目录中的UnityPlayerActivity.java文件拷贝至app/src/main/java子目录中MainActivity同级目录下;
- 将src/main/jniLibs整个目录拷贝至app/src/main目录下;
- 将src/main/AndroidManifest.xml中<activity>...</activity>代码块中的
<action android:name="android.intent.action.MAIN" />删除后,拷贝至app/src/main/AndroidManifest.xml中;

最后的目录结构应该是这样:
这里写图片描述

3.编写Android打开Unity界面的代码
- 在MainActivity中添加一个Button,文本为”Open Unity”,见步骤一中的MainActivity图片;
- 在”MainActivity.java”中添加”OpenUnity”方法,代码如下:
这里写图片描述
- 绑定该方法到Button的onClick事件上;

到此步骤后,可先行测试是否可正常从Android打开Unity,下一步骤需要更改Unity工程重新发布。

4.编写Unity打开Android界面的代码

  • Unity中新增脚本,编写跳转方法,并绑定到一个按钮上,关键代码如下:
public void ReturnToAndroid()    {        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");        jo.CallStatic("Return",jo);        AndroidJavaObject context = jo.Call<AndroidJavaObject>("getApplicationContext");    }
  • 按第三步骤第1步重新导出Unity的Android工程文件,然后用新的assets替换旧的assets目录,其他不用动;
  • Android工程中在UnityPlayerActivity.java中新增方法:

这里写图片描述

至此,所有步骤就完成了,连上手机,在Android Studio中点击Run即可看到效果了。