Unity与Android接口双向调用教程

前言

最近项目有个需求,将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:

unity调用android接口 android调用unity界面_unity

DisplayMessageActivity:

unity调用android接口 android调用unity界面_Android_02

二、制作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”。

unity调用android接口 android调用unity界面_unity_03

导出后的工程根目录如下:

unity调用android接口 android调用unity界面_App_04


内部文件目录为:

- 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中;

最后的目录结构应该是这样:
unity调用android接口 android调用unity界面_unity调用android接口_05



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

- 在MainActivity中添加一个Button,文本为”Open Unity”,见步骤一中的MainActivity图片;

- 在”MainActivity.java”中添加”OpenUnity”方法,代码如下:

unity调用android接口 android调用unity界面_android_06


- 绑定该方法到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中新增方法:

unity调用android接口 android调用unity界面_App_07

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

               

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空