您的位置:首页 > 移动开发 > Unity3D

Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

2016-05-11 11:09 363 查看
我们接着上一篇博客的内容,接着讲Android 和unity 的互动。上一篇我们讲到利用Android Studio 怎样创建一个工程,打包成ARR文件导入到Unity,在通过Unity打包成APK,安装到手机上可以看见Unity摄像机的画面。如果不清楚的可以看我的上一篇博客

http://blog.csdn.net/u014230923/article/details/51363556

接下来我们继续了解,在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工程。

本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息