坑爹的Unity与Android交互
来源:互联网 发布:js微信短网址生成api 编辑:程序博客网 时间:2024/05/24 02:58
本人在开发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项目。
上网查看了很多的例子,这里集合了其他开发者的案例写下了这篇文章,做做笔记。
雨松大神的这一篇《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包。
右键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中作为插件来使用。
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 framevoid Update () {}//在GUI上画一个可以震动手机的button void OnGUI(){ if (GUI.Button(new Rect(240, 250, 100, 40), "vibrate")) { phoneVibrate(); } } private int add(int a, 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项目中的包名。
这里需要注意的是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”。所以必须要三码合一
0 0
- 坑爹的Unity与Android交互
- [Android交互]Android与Unity的交互
- unity与Android的交互
- Unity与Android的交互
- Unity 与 Android (Android Studio)的交互
- Unity 与 Android (Android Studio)的交互
- unity与android交互
- Unity与Android交互
- Unity与Android交互
- Unity与Android交互
- Unity与Android交互
- unity与ANDroid交互
- unity与android交互
- unity与android交互
- Unity与Android交互
- Unity 与 Android交互
- Android与unity交互
- Android与Unity交互以及各种踩的坑
- 一个经典例子让你彻彻底底理解java回调机制
- 八皇后问题(回溯法)
- iOS开发技巧:设置状态样式
- 得到安卓所有已安装程序的信息
- 完全二叉树节点数
- 坑爹的Unity与Android交互
- 两种方法实现类微博tabBar,并跳转页面隐藏
- Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
- ajax
- 安装window操作系统
- Linux内存占用过高?非也
- 【深度反思】:环境影响人的非常重要的因素
- C++作用域
- Android WebView - 全面总结(概述、捕获url、js交互、小技巧、内存泄漏、缓存机制)