最近项目有个需求,将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界面的代码
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");
    }
    
    
至此,所有步骤就完成了,连上手机,在Android Studio中点击Run即可看到效果了。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删