Unity+Android交互教程
一、效果展示
本教程将展示如何通过Unity调用Android原生方法,实现点击Unity界面中的按钮使手机震动的功能。
二、测试方法
此功能必须进行真机测试。
三、实现步骤
(一)创建Android工程
1. 创建工程
启动Android开发环境,按照常规流程创建一个新的Android工程。
2. 导入Unity相关jar
需要导入Unity的classes.jar文件,该文件位于Unity的安装路径\Editor\Data\PlaybackEngines\androidplayer\bin下。将此文件导入到Android工程中。
3. 编写MainActivity.java代码
打开MainActivity.java文件,导入必要的包,并编写自定义函数。以下是示例代码:
package com.example.clickshake;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
import android.app.Service;
import android.os.Vibrator; // 震动的包
public class MainActivity extends UnityPlayerActivity {
private Vibrator mVibrator01; // 声明一个振动器对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
// 震动函数
public void ClickShake() {
mVibrator01 = (Vibrator) getApplication().getSystemService(Service.VIBRATOR_SERVICE);
mVibrator01.vibrate(new long[]{100, 10, 100, 1000}, -1); // 自定义震动模式,只震动一次
}
// 判断大小
public int Max(int a, int b) {
if (a > b)
return a;
return b;
}
}
添加unityActivity,让MainActivity继承UnityPlayerActivity,并删除SetContentView函数(若不删除,在手机上启动程序时可能只会看到一句HelloWorld)。这里定义了两个自定义函数,一个是调用振动器的无参数函数ClickShake,另一个是有返回值和参数的比较大小的函数Max,后续将在Unity中调用这两个函数进行对比。
4. 修改XML并添加震动权限
选择AndroidManifest.xml文件,点击Permissions -> Add UserPermission -> android.permission.VIBRATE,添加允许震动的权限。
5. 导出jar包
在项目根目录上右击,选择Export,然后点击Finish完成导出。
(二)创建Unity工程
1. 创建特殊文件夹并放置文件
在Assets目录下创建Plugins/Android文件夹,这是一个特殊文件夹,专门用于存放Android的包文件,以便调用Android接口。将之前导出的xml、jar、res、libs文件放在该文件夹下。
2. 编写Unity调用Android代码
以下是Unity中调用Android代码的示例:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
private AndroidJavaObject activity;
private int res = 0;
// Use this for initialization
void Start() {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
res = activity.Call<int>("Max", new object[] { 10, 20 });
}
void OnGUI() {
GUI.Label(new Rect(20, 20, 300, 20), "调用的Android方法:求出10和20中比较大的数字是" + res.ToString());
GUI.Label(new Rect(20, 70, 300, 20), "http://blog.csdn.net/dingxiaowei2013");
if (GUI.Button(new Rect(Screen.width / 2 - 20, Screen.height / 2 + 20, 100, 40), "点击震动")) {
activity.Call("ClickShake");
}
}
}
AndroidJavaObject是一个Java对象,这里获取的是Java视图,然后调用自定义方法。需要注意的是,在AndroidJavaClass的构造函数中填入"com.unity3d.player.UnityPlayer"和"currentActivity",是因为在生成jar文件时,已经指定了MainActivity类继承UnityPlayerActivity,并且在XML中指定了MainActivity是主类。activity.Call<int>("","");用于调用有返回值的方法,int是返回类型;activity.Call("");用于调用无返回值、无参数的方法。
3. 导出设置
此步骤较为重要,需按照Unity的导出设置要求进行相应配置。
4. 真机测试
完成上述步骤后,将项目导出到真机上进行测试。测试界面大概会有一个按钮,点击该按钮可使手机震动,还有一个label会显示10和20比较的结果值。这里就不上传截图了。
四、补充说明
关于最基本的交互,可以参考《Unity与Android基本交互》这篇文章,在此基础上实现手机震动的原理是类似的,也可当作自我巩固。
另外,作者之前尝试使用Unity实现二维码扫描功能,在网上找到一个名为EasyCodeScanner的插件,但下载使用时遇到诸多问题。导入运行报错,调试后点击按钮无反应,查看源码发现该插件只实现了IOS部分,没有Android部分,最终作者决定自己动手实现,因此撰写了本教程,供初学者学习。更多教程敬请关注作者的微博。