Android Studio 和 Unity3D 交互

http://oblivious9.pixnet.net/blog/post/204640543-unity-%E4%BD%BF%E7%94%A8android-bluetooth-(android-studio)



開個新專案

Android Studio 和 Unity3D 交互_第1张图片

Android Studio 和 Unity3D 交互_第2张图片

 

我的Unity Android SDK最小為9,所以這邊最小也選9

Android Studio 和 Unity3D 交互_第3张图片

 

由於只是將程式碼包起來給Unity呼叫,所以不需要Activity畫面

Android Studio 和 Unity3D 交互_第4张图片

 

之後請到Unity的安裝路徑:Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin

複製這個檔案到剛剛創建出來的專案libs資料夾內,路徑為:[你的專案位置]\app\libs

即可看到如下圖所示:

Android Studio 和 Unity3D 交互_第5张图片

 

然後對該jar點選右鍵→Add As Library...

按下OK,即可成功導入專案內

Android Studio 和 Unity3D 交互_第6张图片

 

打開AndroidBluetooth\app\src\main\java,可以看到一個空資料夾

Android Studio 和 Unity3D 交互_第7张图片

 

在該空資料夾上點右鍵→New→Java Class,我建立了一個名為AndroidBluetoothForUnity的檔案

Android Studio 和 Unity3D 交互_第8张图片

Android Studio 和 Unity3D 交互_第9张图片

 

開始撰寫程式碼,該程式碼為假設「使用者的裝置有藍芽,且不會通知使用者直接開啟」


package com.androidbluetooth;

import android.bluetooth.BluetoothAdapter;
import com.unity3d.player.UnityPlayer;

public class AndroidBluetoothForUnity
{
    public static void openBluetooth()
    {
        UnityPlayer.currentActivity.runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                BluetoothAdapter bluetoothAdapter;
                bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

                if (bluetoothAdapter.isEnabled() == false)
                {
                    bluetoothAdapter.enable();
                }
            }
        });

    }
}


寫完後應該會出現錯誤,原因是沒有加入藍芽權限!

 

此時打開AndroidBluetooth\app\src\main\AndroidManifest.xml

Android Studio 和 Unity3D 交互_第10张图片

 

加入藍芽權限




加入後存檔(注意package名稱!要使用到該jar檔的Unity package名字要和這個名字相同)

P.S.Unity package名稱可以再Unity的Player Setting內找到,也就是Bundle identifier

Android Studio 和 Unity3D 交互_第11张图片

 

再來點選Android Studio右邊的Gradle

Android Studio 和 Unity3D 交互_第12张图片

 

專案第一次打開Gradle應該都是Nothing to show,此時按下左上的重新整理

Android Studio 和 Unity3D 交互_第13张图片

 

打開該選項,會有兩個子選項,由於我們只是要將AndroidBluetooth\app內的腳本打包出來而已,所以選擇:app

Android Studio 和 Unity3D 交互_第14张图片

 

然後選擇other→jarReleaseClasses

Android Studio 和 Unity3D 交互_第15张图片

Android Studio 和 Unity3D 交互_第16张图片

 

對jarReleaseClasses點右鍵,選擇Run

Android Studio 和 Unity3D 交互_第17张图片

 

就會自動把Android Studio\app內的檔案打包成jar

 

之後可以在[專案存放路徑]\AndroidBluetooth\app\build\intermediates\packaged\release找到打包的jar檔(預設檔名為classes.jar,可以改成自己喜歡的名字)

Android Studio 和 Unity3D 交互_第18张图片

 

而權限檔則在[專案存放路徑]\AndroidBluetooth\app\src\main

Android Studio 和 Unity3D 交互_第19张图片

 

 

 

 

 

打開Unity,新建一個專案,命名為 useBluetooth,並產生如下的資料夾(由於只是示範開啟藍芽,所以新建的專案為2D)

 

並將剛剛複製出來的的jar放到libs資料夾內

 

xml放到Android資料夾內

 

然後打開該xml檔案,將以下字串


    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">


替換成


        android:theme="@style/UnityThemeSelector"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name">
                          android:label="@string/app_name">
           
               
               
           

           
       

   


如下圖

Android Studio 和 Unity3D 交互_第20张图片

變成

Android Studio 和 Unity3D 交互_第21张图片

改這個的用意在於「設定App的進入點、應用程式名字(name)、圖示(icon)、主題(theme)」

 

 

以上步驟都做好後,就新增三個C#腳本,分別命名為:AndroidBehaviour 、 Bluetooth 、Test

AndroidBehaviour腳本同開頭我提到的「Unity使用Android的Toast」那篇AndroidBehaviour腳本相同,所以就不再重複了

而Bluetooth腳本程式碼如下:


using UnityEngine;
using System.Collections;

public class Bluetooth : AndroidBehaviour

{
    protected override string javaClassName
    {
         //要呼叫的class所在的Package名稱.要呼叫的java class名稱
        get { return "com.androidbluetooth.AndroidBluetoothForUnity"; }
    }


    public static void openBT()
    {
        instance.CallStatic("openBluetooth");//要被呼叫的方法名稱
    }
}


 

Test腳本程式碼如下


using UnityEngine;

public class Test : MonoBehaviour
{
    private void Start ()
    {
        Bluetooth.openBT();
    }
}


 

都好之後將Test和Bluetooth放到同個物件上!

(在此範例我放到Camera上)

Android Studio 和 Unity3D 交互_第22张图片

 

之後在 Player Setting 內的 Bundle Identifier 要和複製到該專案內的 AndroidManifest.xml 的 package 名稱一樣,且minSdk也要相同(Minimum API Level)

最後就Build成apk,丟到手機上安裝執行了!(其實也可以直接Build And Run)

P.S.Android Studio預設的SDK位置在 C:\Users\[你的使用者名稱]\AppData\Local\Android\sdk

Android Studio 和 Unity3D 交互_第23张图片

Android Studio 和 Unity3D 交互_第24张图片


你可能感兴趣的:(u3d)