Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

来源:互联网 发布:秋天 知乎 编辑:程序博客网 时间:2024/06/05 00:59

我们接着上一篇博客的内容,接着讲Android 和unity 的互动。上一篇我们讲到利用Android Studio 怎样创建一个工程,打包成ARR文件导入到Unity,在通过Unity打包成APK,安装到手机上可以看见Unity摄像机的画面。如果不清楚的可以看我的上一篇博客 http://blog.csdn.net/sky1466181491/article/details/70651043

接下来我们继续了解,在Unity中怎么调用Activity中的方法。先把Unity和AS都打开,并且选择到上一篇博客创建好的项目那里。 
既然是要调用Activity中的方法,那肯定要在其中创建一个可以调用的方法,打开AS修改MainActivity:

public void showToast(String msg) {        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();    }
在MainActivity中添加这样一个方法,学过android的朋友应该都知道,这是一个显示一条提示的方法。对于android的基础,我就不在这讲了,因为我也不太会。在这里建议大家,就算是学习Unity,也还是需要了解一下Android的基础比较好,因为现在Unity还是开发的手游比较多,就算大家不开发手游,我觉得了解一下也没有坏处。如果大家没学过的话,入门比较快的,也是公认的写的很好的一本书叫做“第一行代码”,这本书能带你比较快速入门。 
好,接下来继续讲解。然后按照上一篇博客的内容,打包,添加到Unity。Activity修改好后,我们修改Unity中的代码。现在场景中添加一个按钮,用来点击调用方法。 

就这样简单弄一下就行了。UI的适配大家自己弄一下。然后,给按钮添加点击事件,我们还没写过代码,好吧,现在新建一个Scripts文件夹,新建一个Show Message脚本给按钮添加,然后编辑脚本:

using UnityEngine;using System.Collections;public class ShowMessage : MonoBehaviour {    public void BtnShwMessage ()    {        //通过查看源码,我们可以发现UnityPlayer这个类可以获取当前的Activity        //帮助手册上 AndroidJavaClass:通过指定类名可以构造出一个类        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        //currentActivity字符串对应源码中UnityPlayer类下 的 Activity 变量名。        //通过构造出的Activity根据字符串获取对象        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");        //根据方法名调用方法,传入一个参数数组,这里我们只有一个,就只传一个        jo.Call("showToast", "Unity 调用了这个方法");    }}


这里大家不理解也没关系,只要知道

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

这个用来获取当前的Activity,一般不用改,

jo.Call("showToast", "Unity 调用了这个方法"); 

是根据方法名调用Activity中的方法,传入一个参数数组就行了。

现在Build就可以在手机上显示画面了。这里我在给大家推荐一个软件 genymotion,这是android的虚拟机,可以很大程度的模仿手机。至于安装和使用教程,请大家自行百度。但是我现在是学生,校园网与它不兼容,所以我就只能用手机查看效果,但效果应该是一样的。大家不必担心。 
言归正传,现在虽然是在手机上运行了,但是点击并没有效果,这是因为在android中有分层,UI执行序和非U执行序(具体请查资料,我也解释不清楚)。在Unity中执行的就是非UI执行序,所以像 Toast 种UI的东西没有办法运行。一个比较简易的解决办法是:修改MainActivity:

public void showToast(final String msg) {        runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();            }        });    }
现在重新打包,导入,Build ,手机上是真正能够有效果了。 


项目工程:http://pan.baidu.com/s/1nuJ392p 
一个是Unity工程,另一个是AS工程。 
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。


0 0
原创粉丝点击