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:
在MainActivity中添加这样一个方法,学过android的朋友应该都知道,这是一个显示一条提示的方法。对于android的基础,我就不在这讲了,因为我也不太会。在这里建议大家,就算是学习Unity,也还是需要了解一下Android的基础比较好,因为现在Unity还是开发的手游比较多,就算大家不开发手游,我觉得了解一下也没有坏处。如果大家没学过的话,入门比较快的,也是公认的写的很好的一本书叫做“第一行代码”,这本书能带你比较快速入门。
好,接下来继续讲解。然后按照上一篇博客的内容,打包,添加到Unity。Activity修改好后,我们修改Unity中的代码。现在场景中添加一个按钮,用来点击调用方法。
就这样简单弄一下就行了。UI的适配大家自己弄一下。然后,给按钮添加点击事件,我们还没写过代码,好吧,现在新建一个Scripts文件夹,新建一个Show Message脚本给按钮添加,然后编辑脚本:
这里大家不理解也没关系,只要知道
这个用来获取当前的Activity,一般不用改,
是根据方法名调用Activity中的方法,传入一个参数数组就行了。
现在Build就可以在手机上显示画面了。这里我在给大家推荐一个软件 genymotion,这是android的虚拟机,可以很大程度的模仿手机。至于安装和使用教程,请大家自行百度。但是我现在是学生,校园网与它不兼容,所以我就只能用手机查看效果,但效果应该是一样的。大家不必担心。
言归正传,现在虽然是在手机上运行了,但是点击并没有效果,这是因为在android中有分层,UI执行序和非U执行序(具体请查资料,我也解释不清楚)。在Unity中执行的就是非UI执行序,所以像 Toast 种UI的东西没有办法运行。一个比较简易的解决办法是:修改MainActivity:
现在重新打包,导入,Build ,手机上是真正能够有效果了。
项目工程:http://pan.baidu.com/s/1nuJ392p
一个是Unity工程,另一个是AS工程。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。
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工程。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories