Android Studio 2.1 和 Unity3D 5.3.4 交互(二)
来源:互联网 发布:手机号定位软件破解版 编辑:程序博客网 时间:2024/06/05 02:28
我们接着上一篇博客的内容,接着讲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工程。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。
- Android Studio 2.1 和 Unity3D 5.3.4 交互(二)
- Android Studio 2.1 和 Unity3D 5.3.4 交互(二)
- Android Studio 2.1 和 Unity3D 5.3.4 交互
- Android Studio 2.1 和 Unity3D 5.3.4使用交互
- Android Studio 和 Unity3D 交互
- Android Studio 和 Unity3D 交互
- Android Studio 与 Unity3d交互(一)
- unity3d-与Android交互(unity5、android studio)
- Android Studio 与 Unity3d交互。归纳版。
- Android Studio 与 Unity3d交互。归纳版。
- Android Studio 与 Unity3d交互。归纳版。
- Android和Unity3D之间的数据交互
- Unity3D与android交互
- Unity3D 与 Android 交互
- unity3d与android交互
- unity3d 和 php交互
- Unity3D和ios交互
- Unity3d和服务器交互
- Android实战技巧之一:文本与布局(字符串变量在资源里替换)
- 深入Android SQLite 事务处理详解
- springmvc的handle method 方法
- LVS+Keepalived+Squid+Nginx高可用负载均衡缓存配置
- 为什么谷歌不会发生“魏则西事件”?
- Android Studio 2.1 和 Unity3D 5.3.4 交互(二)
- ListView分割线,RecycleView分割线
- XMG Quartz2D 图片擦除
- sendfile
- iOS添加、删除通讯录 (清空通讯录)
- 测试
- 只想收藏 数据库锁 http://www.cnblogs.com/zhouqianhua/archive/2011/04/15/2017049.html
- Android体系结构
- 一个刚入门的菜鸟Java之路-框架篇