想要用Unity實現一個二維碼掃描的功能,然後網上找外掛程式,找到一個貌似叫EasyCodeScanner,但下載下來用用,真不好使,一匯入運行就報錯,調好錯了再運行發現點按鈕沒反應,反覆試了幾遍發現還是沒反應,沒辦法看源碼,結果發現只實現了IOS部分,沒有Android部分,我屮艸芔茻...,神傷!用IOS真機測試吧,還是有問題,果斷放棄了,下定決心自己動手豐衣足食,雖然不瞭解Android,但沒有學不起來的,只要想,就沒有實現不了的!!!首先還是得學習一下Android和Unity的簡單互動,在這兒寫個詳細點的教程!供初學者學習,當然網上也有這方面的教程,有的地方不注意的話,還是會碰到困擾的,下面是詳細步驟!更多教程敬請關注我的微博!
效果:這裡展示的Unity調用Android原生的方法實現點擊Unity介面中的按鈕,然後實現手機的震動!關於最基本的互動,可以參考這篇文章,Unity與Android基本互動,然後在這基礎之上來做實現手機震動,其實也差不多!可能重複了,當自我鞏固吧,呵呵!測試方法:必須要真機測試!!!實現步驟:一、建立Android工程1.建立工程
2.匯入Unity相關jarJar目錄:unity的安裝路徑\Editor\Data\PlaybackEngines\androidplayer\bin下的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;//聲明一個震動器對象@Overrideprotected 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代碼
using UnityEngine;using System.Collections;public class NewBehaviourScript : MonoBehaviour { private AndroidJavaObject activity; private int res = 0;// Use this for initializationvoid 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比較的結果值。
更多教程歡迎關注 微博