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工程。
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。
- 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和服务器交互
- 项目部署的一些思考
- 算法--美团--给出m*n个格子,每次只能右走一步或下走一步,打印出所有的路径
- Java web学习总结
- 理解css中的float
- POJ
- Android Studio 2.1 和 Unity3D 5.3.4 交互(二)
- STL 中的map与multimap
- python不足之处总结
- 402. Remove K Digits
- [C++][基础概念]main函数中的参数argc和argv的含义和用法
- [Swift]WKWebView用法介绍
- 中南大学第十一届大学生程序设计竞赛-COJ1898-复盘拉火车
- Hmz 的女装 详细题解
- Android数据存储和访问