[Unity3D]Unity+Android交互教程——讓手機"動"起來

想要用Unity實現一個二維碼掃描的功能,而後網上找插件,找到一個貌似叫EasyCodeScanner,但下載下來用用,真很差使,一導入運行就報錯,調好錯了再運行發現點按鈕沒反應,反覆試了幾遍發現仍是沒反應,沒辦法看源碼,結果發現只實現了IOS部分,沒有Android部分,我屮艸芔茻...,神傷!用IOS真機測試吧,仍是有問題,果斷放棄了,下定決心本身動手豐衣足食,雖然不瞭解Android,但沒有學不起來的,只要想,就沒有實現不了的!!!首先仍是得學習一下Android和Unity的簡單交互,在這兒寫個詳細點的教程!供初學者學習,固然網上也有這方面的教程,有的地方不注意的話,仍是會碰到困擾的,下面是詳細步驟!更多教程敬請關注個人微博java

效果這裏展現的Unity調用Android原生的方法實現點擊Unity界面中的按鈕,而後實現手機的震動!

關於最基本的交互,能夠參考這篇文章,Unity與Android基本交互,而後在這基礎之上來作實現手機震動,其實也差很少!可能重複了,當自我鞏固吧,呵呵!android

測試方法:必需要真機測試!!!

實現步驟:

1、建立Android工程

1.建立工程

 

2.導入Unity相關jar

Jar目錄:unity的安裝路徑\Editor\Data\PlaybackEngines\androidplayer\bin下的classes.jarapp

 

 

3.打開MainActivity.java,導入各類包,編寫本身的函數

[java] view plaincopyprint?ide

 

  1. package com.example.clickshake;  函數

  2.   

  3. import android.os.Bundle;  學習

  4. import com.unity3d.player.UnityPlayerActivity;  測試

  5. import android.app.Service;  this

  6. import android.os.Vibrator;  //震動的包  spa

  7.   

  8. public class MainActivity extends UnityPlayerActivity {  .net

  9.   

  10.     private Vibrator mVibrator01;//聲明一個振動器對象  

  11.       

  12.     @Override  

  13.     protected void onCreate(Bundle savedInstanceState) {  

  14.         super.onCreate(savedInstanceState);  

  15.     }  

  16.       

  17.     //震動函數  

  18.     public void ClickShake()  

  19.     {  

  20.         mVibrator01 = (Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);   

  21.         mVibrator01.vibrate(new long[]{100,10,100,1000},-1);//自定義整棟模式,只震動一次  

  22.     }  

  23.       

  24.       

  25.     //判斷大小  

  26.     public int Max(int a,int b)  

  27.     {  

  28.         if(a>b)  

  29.             return a;  

  30.         return b;  

  31.     }  

  32.   

  33. }  


添加unityActivity,使MainActivity繼承UnityPlayerActivity,並把SetContentView函數刪掉(否則到手機上啓動程序的時候就會只看到一句HelloWorld),這裏有兩個本身自定義的函數主要的就是上面的沒有參數的調用振動器的自定義函數,還有個就是有返回值有參數的比較大小的函數,這裏用兩個不一樣的函數在Unity中調用作對比!

4.修改XML而且添加震動權限

添加容許震動的權限,選擇AndroidManifest.xml,而後點擊Permissions->Add UserPermission->android.perssion.VIBRATE。

5.導出jar包

在項目根目錄上右擊->Export

 

 

點擊Finish結束!

2、建立Unity工程

1.在Assets下建立Plugins/Android文件夾,這個文件夾是特殊文件夾,專門用與存放Android的包文件,以便調用Android接口

將文件的xml,jar,res,libs文件放在Android文件下

 

2.寫Unity調用Android代碼

[csharp] view plaincopyprint?

 

  1. using UnityEngine;  

  2. using System.Collections;  

  3.   

  4. public class NewBehaviourScript : MonoBehaviour {  

  5.   

  6.   

  7.     private AndroidJavaObject activity;  

  8.     private int res = 0;  

  9.     // Use this for initialization  

  10.     void Start () {  

  11.         AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");  

  12.         activity = jc.GetStatic<AndroidJavaObject>("currentActivity");  

  13.         res = activity.Call<int>("Max"new object[] { 10, 20 });  

  14.     }  

  15.   

  16.     void OnGUI()  

  17.     {  

  18.         GUI.Label(new Rect(20, 20, 300, 20), "調用的Android方法:求出10和20中比較大的數字是"+res.ToString());  

  19.         GUI.Label(new Rect(20, 70, 300, 20), "http://blog.csdn.net/dingxiaowei2013");  

  20.         if ( GUI.Button(new Rect(Screen.width / 2 - 20, Screen.height / 2 + 20, 100, 40), "點擊震動"))  

  21.         {  

  22.             activity.Call("ClickShake");  

  23.         }  

  24.           

  25.     }  

  26. }  


說明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比較的結果值。

 

更多教程歡迎關注 微博

相關文章
相關標籤/搜索