想要用Unity实现一个二维码扫描的功能。然后网上找插件。找到一个貌似叫EasyCodeScanner。但下载下来用用,真不好使,一导入执行就报错。调好错了再执行发现点button没反应,重复试了几遍发现还是没反应,没办法看源代码,结果发现仅仅实现了IOS部分,没有Android部分,我屮艸芔茻...,神伤。用IOS真机測试吧,还是有问题,果断放弃了,下定决心自己动手丰衣足食,尽管不了解Android。但没有学不起来的。仅仅要想,就没有实现不了的。!
!
首先还是得学习一下Android和Unity的简单交互,在这儿写个具体点的教程!
供刚開始学习的人学习,当然网上也有这方面的教程,有的地方不注意的话。还是会碰到困扰的。以下是具体步骤!很多其它教程敬请关注我的微博!
效果:这里展示的Unity调用Android原生的方法实现点击Unity界面中的button,然后实现手机的震动!
关于最主要的交互。能够參考这篇文章。Unity与Android基本交互,然后在这基础之上来做实现手机震动,事实上也几乎相同!可能反复了,当自我巩固吧,呵呵。
測试方法:必需要真机測试!!!
实现步骤:
一、创建Androidproject
1.创建project
2.导入Unity相关jar
Jar文件夹:unity的安装路径EditorDataPlaybackEnginesandroidplayerin下的classes.jar
3.打开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),这里有两个自己自己定义的函数基本的就是上面的没有參数的调用振动器的自己定义函数,还有个就是有返回值有參数的比較大小的函数,这里用两个不同的函数在Unity中调用做对照!
4.改动XML而且加入震动权限
加入同意震动的权限,选择AndroidManifest.xml,然后点击Permissions->Add UserPermission->android.perssion.VIBRATE。
5.导出jar包
在项目根文件夹上右击->Export
点击Finish结束!
二、创建Unityproject
1.在Assets下创建Plugins/Android目录,这个目录是特殊目录。专门用与存放Android的包文件,以便调用Android接口
将文件的xml,jar。res,libs文件放在Android文件下
2.写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视图,然后调用自己定义方法。
(注:初步了解这里的參数之所以填”com.unity3d.player.UnityPlayer”和”currentActivity”,是由于在生成jar文件的时候,已经指定了MainActivityclass继承UnityPlayerActivity。也在XML指定了MainActivity是Main class)
activity.Call<int>("","");这个调用的是有返回值的方法。int是返回类型,activity.Call("");调用的是没返回值没參数的方法
3.导出设置(Importent)
4.真机測试
我就不上传截图了。大概就是一个button。可以点击使手机震动,另一个label,显示10和20比較的结果值。