想要用Unity實現一個二維碼掃描的功能,然后網上找插件,找到一個貌似叫EasyCodeScanner,但下載下來用用,真不好使,一導入運行就報錯,調好錯了再運行發現點按鈕沒反應,反復試了幾遍發現還是沒反應,沒辦法看源碼,結果發現只實現了IOS部分,沒有Android部分,我屮艸芔茻...,神傷!用IOS真機測試吧,還是有問題,果斷放棄了,下定決心自己動手豐衣足食,雖然不了解Android,但沒有學不起來的,只要想,就沒有實現不了的!!!首先還是得學習一下Android和Unity的簡單交互,在這兒寫個詳細點的教程!供初學者學習,當然網上也有這方面的教程,有的地方不注意的話,還是會碰到困擾的,下面是詳細步驟!更多教程敬請關注我的微博!
效果:這里展示的Unity調用Android原生的方法實現點擊Unity界面中的按鈕,然后實現手機的震動!
關於最基本的交互,可以參考這篇文章,Unity與Android基本交互,然后在這基礎之上來做實現手機震動,其實也差不多!可能重復了,當自我鞏固吧,呵呵!
測試方法:必須要真機測試!!!
實現步驟:
一、創建Android工程
1.創建工程




2.導入Unity相關jar
Jar目錄:unity的安裝路徑\Editor\Data\PlaybackEngines\androidplayer\bin下的classes.jar

3.打開MainActivity.java,導入各種包,編寫自己的函數
[java] view plaincopyprint?
-
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結束!
二、創建Unity工程
1.在Assets下創建Plugins/Android文件夾,這個文件夾是特殊文件夾,專門用與存放Android的包文件,以便調用Android接口
將文件的xml,jar,res,libs文件放在Android文件下

2.寫Unity調用Android代碼
[csharp] view plaincopyprint?
-
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.真機測試
我就不上傳截圖了,大概就是一個按鈕,能夠點擊使手機震動,還有一個label,顯示10和20比較的結果值。
