坑爹的Unity与Android交互
2016-03-08 00:08
429 查看
本人在开发Unity游戏过程中,需要增加一些功能,例如手机震动,打开公司网页,打开微信程序分享游戏。这些功能,unity并不能直接实现的,毕竟unity生成的游戏,而不是手机系统,当然不能够实现啦。因此,想要实现这些手机平台上的功能,还是需要跟原生平台打交道,通过调用原生平台提供的API来实现滴。
上网查看了很多的例子,这里集合了其他开发者的案例写下了这篇文章,做做笔记。
雨松大神的这一篇《Unity3D研究院之与Android相互传递消息(十九)》http://www.xuanyusong.com/archives/676
xv_ly15 的这篇《[Unity3D]调用Android接口》http://blog.csdn.net/xv_ly15/article/details/9314199/
这里我就以unity实现android手机平台震动为案例,分享一下我的经验吧!Let’s go!
这次我们需要的Eclipse版本为Luna Service Release 2 (4.4.2) Build id: 20150219-0600。
Android sdk版本为24.0.2
ADT版本为23.0.6.1720515
C#:vs2015
原理:
步骤:
1、 建立提供给Unity调用的方法。
首先,我们用Eclipse新建一个android项目。
设置好包名、应用的名字
2、将Unity的class.jar作为类库导入到android项目当中。具体的class包要根据unity的安装位置而定。
3、好了,我们将所有的东西都准备好了。我们就开始写安卓端震动的功能。方法都在MainActivity类中,作为静态调用。
MainActivity.java
3、 编写完功能后,我们就将它导出为jar包。
右键package explorer中的src,将src文件导出为jar包。
4、 当然,我们还需要配置一下AndroidManifest.xml文件。
这里有一个activity,就是我们刚才写的jar包中的mainActivity,默认启动。
5、 好了,我们得到了一个震动的jar包后,然后将android项目的资源都复制到unity项目中的Plugins/Android中作为插件来使用。
结构如下:
将刚才热辣辣导出的jar包放到在libs文件夹中。
呼,android方面都基本上搞定了,然后我们就编写unity里的代码。
1、 新建一个C#文件,用于调用android的方法。把该代码挂在一个GameObject中。
代码如下:
这里重点的是AndroidJavaClass这个类,用于Unity调用java包中方法的类,一般我们可以使用CallStatic接口来调用java中的静态方法。这里调用的是MainActivity包中的vibratePhone静态方法来实现手机的震动。
2、 配置一下Unity导出设置
这里需要注意的是Bundle Indentifier,导出的jar包必须和这里的包名要一致。否者就需要修改android项目中的包名。
最后,我们就可以导出apk来测试一下手机震动的功能。
后记:
遇到的问题
1、 Unable to convert classes into dex format. See the Console for details.
这个问题的出现,最主要是android插件目录中有相同的包。开发过程中很多时候包重复,这个是很蛋疼的。所以只能是查看一下哪些包出现了重复,把重复的包给删除就能解决了。又或者是在开发android的时候,。最好是引用其他项目中jar包,而不是将其代码复制到其中,避免冲突。
这里介绍一个java的查看工具,java-gui,可以查看一些jar包中的class文件,这个方便我们去找出问题所在。下载地址:http://jd.benow.ca/
2、震动不能,Java中抛出异常。
这个错误我是一时大意了,是因为我java中定义的静态方法是在com.flashZero.game.Unitls类中,并不是MainActivity类中,而我在c#中调用的是在”com.flashZero.game.MainActivity”。所以必须要三码合一
上网查看了很多的例子,这里集合了其他开发者的案例写下了这篇文章,做做笔记。
雨松大神的这一篇《Unity3D研究院之与Android相互传递消息(十九)》http://www.xuanyusong.com/archives/676
xv_ly15 的这篇《[Unity3D]调用Android接口》http://blog.csdn.net/xv_ly15/article/details/9314199/
这里我就以unity实现android手机平台震动为案例,分享一下我的经验吧!Let’s go!
这次我们需要的Eclipse版本为Luna Service Release 2 (4.4.2) Build id: 20150219-0600。
Android sdk版本为24.0.2
ADT版本为23.0.6.1720515
C#:vs2015
原理:
步骤:
1、 建立提供给Unity调用的方法。
首先,我们用Eclipse新建一个android项目。
设置好包名、应用的名字
2、将Unity的class.jar作为类库导入到android项目当中。具体的class包要根据unity的安装位置而定。
3、好了,我们将所有的东西都准备好了。我们就开始写安卓端震动的功能。方法都在MainActivity类中,作为静态调用。
MainActivity.java
package com.flashZero.game; import android.os.Bundle; import android.os.Vibrator; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { private static Vibrator v; private static boolean isInit;//初始化手机震动标识 private static long[] pattern = { 100L, 400L, 100L, 400L }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); v = (Vibrator)this.getSystemService("vibrator");//这里是应用程序一开始就获取该activity的系统服务,用于手机震动 isInit = true; } /** * 手机震动方法 */ public static void vibratePhone() { if (!isInit) { return; } v.vibrate(pattern, 3); } /** * @param time 震动时间 */ public static void vibratePhone(int time) { if (!isInit) { return; } v.vibrate(pattern, 2); } }
3、 编写完功能后,我们就将它导出为jar包。
右键package explorer中的src,将src文件导出为jar包。
4、 当然,我们还需要配置一下AndroidManifest.xml文件。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.flashZero.game" android:versionCode="1" android:versionName="1.0" > <!-->震动权限<--> <uses-permission android:name="android.permission.VIBRATE" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.flashZero.game.MainActivity" android:label="@string/app_name" > <intent-filter> <!-->启动方式<--> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
这里有一个activity,就是我们刚才写的jar包中的mainActivity,默认启动。
5、 好了,我们得到了一个震动的jar包后,然后将android项目的资源都复制到unity项目中的Plugins/Android中作为插件来使用。
结构如下:
将刚才热辣辣导出的jar包放到在libs文件夹中。
呼,android方面都基本上搞定了,然后我们就编写unity里的代码。
1、 新建一个C#文件,用于调用android的方法。把该代码挂在一个GameObject中。
代码如下:
using UnityEngine; using System.Collections; using System; using UnityEngine.UI; public class TestAndroid : MonoBehaviour { // Use this for initialization public Text t1; private AndroidJavaClass ajc; void Start () { //获取jar包中的Untils中的引用 ajc = new AndroidJavaClass("com.flashZero.game. MainActivity "); } // Update is called once per frame void Update () { } //在GUI上画一个可以震动手机的button void OnGUI() { if (GUI.Button(new Rect(240, 250, 100, 40), "vibrate")) { phoneVibrate(); } } private int add(int a 9685 , int b) { return ajc.CallStatic<int>("add",a,b); } private void phoneVibrate() { ajc.CallStatic("vibratePhone"); } }
这里重点的是AndroidJavaClass这个类,用于Unity调用java包中方法的类,一般我们可以使用CallStatic接口来调用java中的静态方法。这里调用的是MainActivity包中的vibratePhone静态方法来实现手机的震动。
2、 配置一下Unity导出设置
这里需要注意的是Bundle Indentifier,导出的jar包必须和这里的包名要一致。否者就需要修改android项目中的包名。
最后,我们就可以导出apk来测试一下手机震动的功能。
后记:
遇到的问题
1、 Unable to convert classes into dex format. See the Console for details.
这个问题的出现,最主要是android插件目录中有相同的包。开发过程中很多时候包重复,这个是很蛋疼的。所以只能是查看一下哪些包出现了重复,把重复的包给删除就能解决了。又或者是在开发android的时候,。最好是引用其他项目中jar包,而不是将其代码复制到其中,避免冲突。
这里介绍一个java的查看工具,java-gui,可以查看一些jar包中的class文件,这个方便我们去找出问题所在。下载地址:http://jd.benow.ca/
2、震动不能,Java中抛出异常。
这个错误我是一时大意了,是因为我java中定义的静态方法是在com.flashZero.game.Unitls类中,并不是MainActivity类中,而我在c#中调用的是在”com.flashZero.game.MainActivity”。所以必须要三码合一
相关文章推荐
- iTween基础之Audio(音量和音调的变化)
- Unity3D 参考网址
- Unity自带的SimpleJSon的简单使用
- [置顶] Unity中关于图形学的基础知识—矩阵(二)
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
- [置顶] unity中关于图形学的基础知识(一)
- unity之旅
- Unity3D之Web Player与unity的互相传值交互
- Unity开发Android游戏(二)Hello world!
- Unity开发Android游戏(一)搭建Unity安卓开发环境
- Unity3D Android手机开发环境配置,可真机发布调试
- 在Unity中使用Shader
- [Solution] DI原理解析及Castle、Unity框架使用
- Unity插件之Editor Console Pro
- 【转】关于unity中的update、Lateupdate和FixedUpdate。
- Unity3D 移动平台Path对应路径以及文件路径权限
- Unity3D如何接入第三方的SDK - Android篇
- Unity Notes之屏幕触点轨迹的平滑
- Two kinds of Quaternion SlerpImp (Unity)
- Unity_UGUI_动画系统