√ Android傳值至Unity(Android plugin)
Android部分,新增一個專案(因無UI部分,故建立時選擇「Add No Activity」即可),建立Library,並於Library中建立java檔,撰寫一公開的靜態回傳函式。
1️⃣ 建立Module(Library)
選擇「File」→「New」→「New Moduld」。
選擇Module的類型,在此選擇「Android Library」,點選出現藍色反白後點選「Next」。
依序輸入Name,並點選Finish便會生成。其中Module name及Package name,IDE應會自動輸入,若欲自行更改也可;SDK基本上就跟專案建置時選擇的一樣,不必更動。
生成後之Library在側邊欄位可看到。
2️⃣ Library中建立java
選擇Library中的「java」→右鍵→「New」→「Java Class」
只需要輸入Class name即可。(注意Kind要選擇Class。)
4️⃣ 於java檔中撰寫靜態函式。(要設為Public,否則會抓不到此函式)
package com.xin.unityplugin; //package name /** * Created by xin on 2018/5/2. */ public class UnityPluginClass { //class public static String GetTextFromPlugin(int day) { //method return "Today is " + day ; } public static String GetTextFrom() { return "what happen?" ; } }
5️⃣ 生成jar檔
於右側點選「Gradle」叫出選單。
尋找Library中的「assemble」,雙擊後使之生成函式庫。
函式庫jar檔生成後位置會在:「Library資料夾」→「build」→「intermediates」→「bundles」→「release」→「classes.jar」。
以此專案為例,函式庫jar檔生成後位置會在:UnitySocketPlugin/unitysocket/build/intermediates/bundles/release。
Unity部分,新增一個專案
1️⃣ 儲存Scenes
選擇「File」→「Save Scenes」
2️⃣ 建立C# Scripts
右鍵→「Create」→「C# Script」
3️⃣ 引用jar檔
建立資料夾:「UnityPlugin」→「Android」→「libs」,並將方才Android Studio生成之「classes.jar」拖曳至此。
最後Assets底下會有三個項目:
5️⃣ 建立3D Text物件
建立3D Text物件,「Hierarchy底下右鍵」→「3D Object」→「3DText」
或於「GameObiect」→「3D Object」→「3DText」。
6️⃣ 將Script加入3D Text底下(直接拖曳即可)
7️⃣ 撰寫C# Script
→建立TextMesh物件。
→建立AndroidJavaObject,後面路徑為「package.classname」,如下Package name:com.xin.unityplugin,Class name:UnityPluginClass。
→呼叫函示並將回傳值置入Text物件中。
(AndroidJavaObiect官方說明)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnityPlugin : MonoBehaviour { void Start () { Debug.Log ("Hello"); TextMesh textMesh = GetComponent<TextMesh>(); AndroidJavaObject plugin = new AndroidJavaClass ("com.xin.unityplugin.UnityPluginClass"); textMesh.text = plugin.CallStatic<string> ("GetTextFromPlugin", 7); //後面之數字為輸入值 // textMesh.text = plugin.CallStatic<string> ("GetText"); } }
最後編譯並燒錄手機,即可讀取、顯示Android Studio函式所回傳之資料。