想要用Unity實現一個二維碼掃描的功能,而後網上找插件,找到一個貌似叫EasyCodeScanner,但下載下來用用,真很差使,一導入運行就報錯,調好錯了再運行發現點按鈕沒反應,反覆試了幾遍發現仍是沒反應,沒辦法看源碼,結果發現只實現了IOS部分,沒有Android部分,我屮艸芔茻...,神傷!用IOS真機測試吧,仍是有問題,果斷放棄了,下定決心本身動手豐衣足食,雖然不瞭解Android,但沒有學不起來的,只要想,就沒有實現不了的!!!首先仍是得學習一下Android和Unity的簡單交互,在這兒寫個詳細點的教程!供初學者學習,固然網上也有這方面的教程,有的地方不注意的話,仍是會碰到困擾的,下面是詳細步驟!更多教程敬請關注個人微博!java
關於最基本的交互,能夠參考這篇文章,Unity與Android基本交互,而後在這基礎之上來作實現手機震動,其實也差很少!可能重複了,當自我鞏固吧,呵呵!android
Jar目錄:unity的安裝路徑\Editor\Data\PlaybackEngines\androidplayer\bin下的classes.jarapp
[java] view plaincopyprint?ide
package com.example.clickshake; 函數
import android.os.Bundle; 學習
import com.unity3d.player.UnityPlayerActivity; 測試
import android.app.Service; this
import android.os.Vibrator; //震動的包 spa
public class MainActivity extends UnityPlayerActivity { .net
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中調用作對比!
添加容許震動的權限,選擇AndroidManifest.xml,而後點擊Permissions->Add UserPermission->android.perssion.VIBRATE。
在項目根目錄上右擊->Export
點擊Finish結束!
將文件的xml,jar,res,libs文件放在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("");調用的是沒返回值沒參數的方法
我就不上傳截圖了,大概就是一個按鈕,可以點擊使手機震動,還有一個label,顯示10和20比較的結果值。
更多教程歡迎關注 微博