如何簡單的使用Unity呼叫原生Android外掛
Unity呼叫原生Android
Foldcc
Unity version:2018.1
Android Studio version : 3.1.2
簡介
由於自己需要使用Android原生的一些功能,但是發現網上對接原生的方法實在太麻煩太複雜,因此自己打算髮這篇部落格供大家參考 ,沒有那麼多複雜操作,不需要什麼匯出unity的class.jar、不需要繼承UnityPlayerActivity、不需要修改什麼xml也不需要同步包名什麼的。
整體流程:
先大概講一遍整體流程 在逐一細講:
1. 使用Android Studio寫一個工具類
2. 將工具類匯出為aar或者jar,這裡我匯出的為aar也推薦使用
3. 將外掛匯入到Unity的Plugins/Android下
4. 建立用於與建立對接的工具類
Android工具類
這裡用一個震動工具類給大家演示,不需要建立Activity,直接建立一個普通的class檔案就行了,然後將他匯出為aar,放到Unity 專案中,一定要放在Plugins/Android下 如果沒有對應資料夾直接建立,Android如何匯出外掛請自行百度,工具類參考程式碼如下(工具類就一個簡單的呼叫系統震動沒有註釋也不需要過多注意,本文著重講Unity端):
public class Vibrator {
private android.os.Vibrator vibratorService;
public boolean Init (Context context){
vibratorService = (android.os.Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
return (vibratorService != null);
}
public boolean HasVibrator(){
if(vibratorService == null) return false;
return vibratorService.hasVibrator();
}
public void StartVibrator(int ms){
if(vibratorService == null) return;
vibratorService.vibrate(ms);
}
public void LoopStartVibrator(long[] pattern, int repeat) {
if(vibratorService == null) return;
vibratorService.vibrate(pattern, repeat);
}
public void StopVibrator(){
if(vibratorService == null) return;
vibratorService.cancel();
}
}
Unity對接Android
對接的核心需要以下兩個類:
- AndroidJavaClass : 獲取指定路徑下的javaClass物件
- AndroidJavaObject : 獲取指定路徑下的javaObject物件
現在我們第一步是要把寫好的工具給拿到手,因此直接使用new AndroidJavaObject(“工具類地址全名”)即可, 通過這一句程式碼我們就已經拿到工具類並例項化了,但由於我的震動類需要一個Activity上下文物件不然沒法使用,我們可以通過直接獲取Unity自己的Activity來初始化震動類。
以下程式碼是獲取Unity的Activity後傳入到工具類的程式碼演示:
//獲取Unity的Activity Class
using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
//獲取對應的例項化物件,這兩句都是固定寫法
using (AndroidJavaObject activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity"))
{
//拿到我自己的工具類並例項化
AndroidJavaObject VibratorInstance = new AndroidJavaObject("tool.foldcc.unitytools.Vibrator");
//向工具類裡的Init方法傳入Unity的activity物件用於初始化工具類
VibratorInstance .Call<bool>("Init", activityContext);
}
}
這裡的 Call 方法第一個引數表示執行的指定方法名後面的是一個可變引數,可以寫方法需要的對應引數。
呼叫原生工具類的方法
執行原生工具類的關鍵就是Call方法,以下是Cal方法的幾種說明:
- Call : 呼叫指定非靜態方法
- Call<指定型別> : 呼叫指定非靜態方法並返回指定型別(基礎型別)
- CallStatic : 呼叫指定靜態方法
- CallStatic<指定型別> : 呼叫指定靜態方法並返回指定型別(基礎型別)
關於引數問題: 第一個引數為 方法名 必須傳, 第二個為一個可變長引數,可以傳多個引數也可以不傳,根據對應方法的需求來定。
最後貼出Unity端對接Android程式碼:
using UnityEngine;
public class VibratorImp{
private AndroidJavaObject VibratorInstance = null;
private static VibratorImp vibratorImp;
public static VibratorImp Instance {
get {
if (vibratorImp == null) {
vibratorImp = new VibratorImp();
using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity"))
{
using (AndroidJavaClass pluginClass = new AndroidJavaClass("tool.foldcc.unitytools.Vibrator"))
{
if (pluginClass != null)
{
vibratorImp.VibratorInstance = new AndroidJavaObject("tool.foldcc.unitytools.Vibrator");
vibratorImp.VibratorInstance.Call<bool>("Init", activityContext);
}
}
}
}
if (vibratorImp.VibratorInstance == null)
{
Debug.LogError("Init vibrator service err");
}
}
return vibratorImp;
}
}
/// <summary>
/// 啟動震動
/// </summary>
/// <param name="ms">震動時間(毫秒)</param>
public void StartVibrator(int ms) {
VibratorInstance.Call("StartVibrator", ms);
}
/// <summary>
/// 啟動高階震動 可自行控制震動間隔來間接控制震動強度
/// </summary>
/// <param name="msArray">陣列下標從0開始第一個為震動時長第二個為停頓時長以此迴圈</param>
/// <param name="repeat">從指定下標開始 -1表示從頭開始 預設為-1</param>
public void LoopStartVibrator(long[] msArray , int repeat = -1) {
VibratorInstance.Call("LoopStartVibrator", msArray , repeat);
}
/// <summary>
/// 停止震動
/// </summary>
public void StopVibrator() {
VibratorInstance.Call("StopVibrator");
}
}
在Unity遊戲邏輯中任何一個地方呼叫該工具類即可實現自定義震動效果!麻煩點個贊喲!
相關推薦
如何簡單的使用Unity呼叫原生Android外掛
Unity呼叫原生Android Foldcc Unity version:2018.1 Android Studio version : 3.1.2 簡介 由於自己需要使用Android原生的一些功能,但是發現網上對接原生的方法實
Unity學習筆記007.Unity接入原生Android百度AR地圖
大概操作步驟按筆記006執行。 1.背景 環境: OS:Windows10 Android Studio3.2 Unity 2018.1.2f1 思路 Unity端:主調方,UI Android端:底層介面,打包aar方式 2.步驟 2.1 Android S
unity呼叫android原生介面
這2天在研究unity呼叫android原生的java程式碼,由於對android開發不熟悉,一切都是從頭開始學。最開始連通過搜尋引擎要用什麼關鍵字都不知該如何概括(現在知道了,即:android plugin for unity)。。。我使用的android開發工具是and
Unity呼叫iOS原生內購
Unity在5.x以後的版本,都附帶了各種平臺的IAP(內購),網上一搜Unity IAP,就一大堆如何如何接入的教程,據說還挺方便的。本人也是用Unity 5.x,也曾經用了一下Unity的IAP,那為何現在還要討論呼叫iOS原生的IAP呢? 在這裡不得不吐槽一下Unity的IAP,雖然它目的
Android封裝jar包,把當前專案設定成module,封裝手機振動jar包給unity呼叫
Android封裝jar包或者把當前專案設定成module操作步驟都一樣,此處以手機振動為例,封裝jar包給Unity平臺使用,具體如下: Android部分: 1.建立unity要呼叫的手機振動的類:PhoneVibrate package com.lin.phonevibrate;
Unity呼叫Android
unity5.X androidstudio3.1.2 第一步,新建安卓工程 點finish就可以了。 新建module。 選擇Android Library。 此處Pacage name要和unity裡面的包名一致。然後點finish,等
Unity呼叫Android方法實現開啟第三方APK
Android 建立的Android的工程,和平常一樣建立 匯入classes.jar包開啟Windows找到classes.jar檔案複製到app> libs下。我的classes.jar檔案位置為D:\ Unity5.6.0 \ Editor \ Data
Unity專案接入Android的Admob Native(原生視訊廣告) SDK
Admob的Native(原生)廣告SDK有Unity版本,但只支援圖文廣告,不支援視訊,為了在Native中加入視訊,只好來接Android的SDK。實現了Unity專案匯出Android Studio工程,AS接入Android SDK後匯出Apk過程。 對於Andro
Android外掛化技術之旅 1 開篇 - 實現啟動外掛與呼叫外掛中的Activity和Service
前言 Android技術如今已很成熟了,元件化、外掛化、熱修復等等框架層出不窮,如果只停留在單純的會用框架上,技術永遠得不到成長,只有懂得其原理,能夠婉婉道來,能夠自己手動寫出,技術才會得到成長,與其焦慮未來,不如把握現在。本篇將手寫教大家寫出外掛化框架,外掛化技術是Android高階工程師必備的技術之一,
unity 呼叫C++庫(android+jni+window dll平臺實現)
方便不知道如何再unity呼叫各平臺動態庫的同學參考,實測可用: window案例 動態庫名 tracker_model.dll 位置 unity工程 Assets\Plugins目錄下 c# 關鍵呼叫 程式碼 using UnityEngine; using Syst
Unity--- 簡單模仿一下原生協程的實現
先來看下測試程式碼 ... void Start() { CoroutineManager.Manager.StartCorouine(testWaitTime(1)); CoroutineManager.Manager.StartCorouine(te
Android Studio如何匯出可供Unity使用的aar外掛詳解
前言 專案之前使用Eclipse匯出的jar檔案來做與Android互動,最近因為工作需要需使用Android Studio的aar檔案,網上參考了部分文章,也結合自己的理解重新整理一下具體的方法,通過寫一個測試Demo來表述Android Studio建立aar的過程與及Unity如何使用aar檔案,希
Android Studio 匯出aar包供Unity呼叫
前言 專案之前使用Eclipse匯出的jar檔案來做與Android互動,最近因為工作需要需使用Android Studio的aar檔案,網上參考了部分文章,也結合自己的理解重新整理一下具體的方法,通過寫一個測試Demo來表述Android Studio建立aar的
Android H5混合開發 JS呼叫原生方法
最近剛接收的新專案,涉及到了JS和原生android的互動,遇到了一些問題做個記錄儲存下來首先 webview.addJavascriptInterface1.首先還是一樣的佈局檔案放WebView控制元件,建立一個H5Activity.class去呼叫此佈局2.然後給w
Unity呼叫Android引數為陣列的方法
Unity開發過程中,如果要呼叫Android端的java方法,恰巧該方法的引數是可變引數或者陣列,使用unity的AndroidJavaObject提供的call方法直接傳遞c#陣列,是需要對陣列引數做一下處理。舉例說明:java方法如下:public void addLi
android 呼叫原生圖片裁剪後的圖片尺寸縮放
在安卓開發中,如果對拍照後的圖片進行圖片裁剪,如果是呼叫系統的裁剪,如下: /* * 裁剪圖片 */ private void cropPhoto() { Intent intent = new Intent("com.android.camera.act
Android Unity混合開發之Unity呼叫Android方法的坑
dialog popupwindow 之類 凡是跟控制元件有關係的方法 都要 private void yourMethodName() { runOnUiThread(new Runnable() { @Override public void
Unity呼叫安卓原生的通用前奏(血淚史)
老早就想著寫一篇關於unity與安卓互動的部落格記錄了,一直也沒有時間剛好最近專案與安卓原生的互動很頻繁。就想著順帶記錄一下我的安卓互動血淚史。網上 的參考部落格很多很多五花八門,琳琅滿目,其實都挺不錯的但是呢在實際開發過程中會遇到各種各樣的 你想不到的坑,而這些坑只能
Unity調用Android的Activity
unity android activity 交互 之前http://shuxiayeshou.blog.51cto.com/4452347/1932216 寫了關於Unity與Android結合所遇到的問題及解決方法總結一下,Unity做一個簡單的場景,AndroidStudio建一個簡單的
unity直連android真機在Profiler性能分析測試
unity androi 如果 dash 分析 窗口 tcp 是不是 屏蔽 基礎步驟: 1、Unity打開你要測試的項目:File–Build Settings 2、如下圖,按圖順序進行1、2、3、4、5操作,如果做過了,2就是灰色的,不能被點擊,4和5