【UnityAS】Unity Android Studio 聯合開發快速入門:環境配置、AAR 集成與雙向調用教程


這是一篇2021年的存檔,使用Unity2020版本。
至今,Unity與AS很多通訊方式也是基于此衍生。
作為Unity與AS聯合開發的受益者,難得掏出自己的飯碗,諸君共享!


在這里插入圖片描述


Unity & Android Studio 聯合開發快速入門

——Unity與AS之間的互相調用實戰指南

在移動開發中,Unity 常常用于快速構建跨平臺的 3D/2D 應用,而 Android Studio(AS)則是調用 Android 原生功能的利器。為了結合二者的優勢,我們需要掌握 Unity 與 AS 的互相調用方式。本文將從環境配置開始,逐步講解 Unity 調用 Android 方法、AS 調用 Unity 方法,以及實際的通信示例。


文章目錄

  • Unity & Android Studio 聯合開發快速入門
    • 一、Unity 環境配置
      • 1. 開發模塊
      • 2. 開發平臺
      • 3. 環境配置
    • 二、Visual Studio 配置
      • 方式1:Unity Hub 中勾選
      • 方式2:手動配置 Visual Studio
        • 先決條件
        • 安裝 Visual Studio Tools for Unity
        • 檢查更新
        • 配置 Unity 使用 VS
    • 三、Unity 調用 AS 導出的 aar
      • 1. AS 導出 aar
      • 2. Unity 導入 aar
      • 3. 編寫腳本與綁定
      • 4. 調試與運行
      • 5. 運行結果
    • 四、AS 調用 Unity 導出的工程
      • 1. 示例腳本
      • 2. 導出 Android 工程
      • 3. 調用方式
      • 4. 常見問題
    • 五、Unity 與 AS 互相調用
      • 1. Unity 調用 AS
        • 方式1:繼承 UnityPlayerActivity
        • 方式2:調用靜態方法
        • 方式3:調用非靜態方法 / 單例模式
      • 2.AS 調用 Unity
        • 方式1:UnitySendMessage
        • 方式2:使用 AndroidJavaProxy 實現回調通信
      • 3. Unity 調用 Android Toast 示例
        • Unity 直接調用 Android API
        • Unity 調用 AS 中的 Toast
    • 總結

一、Unity 環境配置

1. 開發模塊

打開 Unity Hub → 安裝 Unity 版本 → 添加模塊時,勾選 Android Build Support
在這里插入圖片描述

2. 開發平臺

在 Unity 編輯器中切換到 Android 平臺:
File → Build Settings → Android → Switch Platform
在這里插入圖片描述

3. 環境配置

進入 Edit → Preferences → External Tools,確認 JDK、SDK、NDK 路徑正確。
注意 Unity 版本兼容性,例如 Unity 2020 LTS 僅支持:

  • JDK 1.8
  • NDK 19.0.523213
    在這里插入圖片描述

二、Visual Studio 配置

方式1:Unity Hub 中勾選

安裝 Unity 時直接選擇 Visual Studio 組件。
在這里插入圖片描述

方式2:手動配置 Visual Studio

先決條件

確保已通過 Unity Hub 安裝 Unity。

安裝 Visual Studio Tools for Unity
  1. 打開 Visual Studio Installer。
  2. 選擇安裝或修改現有版本。
  3. 工作負載 中勾選 使用 Unity 的游戲開發
    在這里插入圖片描述
檢查更新
  • 幫助 → 檢查更新,保持 VS 最新,確保 bug 修復與 Unity 支持。
    在這里插入圖片描述
配置 Unity 使用 VS
  1. Unity → Edit > Preferences > External Tools
  2. External Script Editor 中選擇 VS。
  3. 如未列出,可手動選擇 devenv.exe
  4. 勾選 Editor Attaching,保證調試可用。

在這里插入圖片描述


三、Unity 調用 AS 導出的 aar

1. AS 導出 aar

  • 在 AS 中編寫 Java 方法。
    在這里插入圖片描述

  • 執行 Gradle 構建:clean → assemble
    在這里插入圖片描述

  • aar 生成路徑:build/outputs/aar/
    在這里插入圖片描述

2. Unity 導入 aar

將 aar 文件放入:
Assets/Plugins/Android/ 目錄下,即可直接在 C# 中訪問。
在這里插入圖片描述

3. 編寫腳本與綁定

  • 在 Unity C# 腳本中調用 aar 方法。
    在這里插入圖片描述
  • 將腳本掛載到場景對象(如 Main Camera)。
    在這里插入圖片描述

4. 調試與運行

  • 使用 Attach to Unity 調試。
    在這里插入圖片描述

  • 注意:PC 模擬時返回值可能與 Android 不同(如布爾值)。
    *在這里插入圖片描述

  • 構建 APK,在手機開啟開發者模式后運行測試。

在這里插入圖片描述

5. 運行結果

場景啟動時調用 aar 方法,例如調用 showToast() 在手機端顯示 Toast。
在這里插入圖片描述


四、AS 調用 Unity 導出的工程

1. 示例腳本

在 Unity 中編寫 C# 腳本,供 Android 調用。
在這里插入圖片描述

2. 導出 Android 工程

Unity → Build Settings → Export Project
在這里插入圖片描述
導出的文件目錄如下
在這里插入圖片描述

3. 調用方式

  • AS 直接導入:用 AS 打開導出的工程,直接運行。

在這里插入圖片描述

  • 作為依賴模塊導入:僅導入 unityLibrary 模塊,集成到現有 AS 工程。
    在這里插入圖片描述

修改安卓清單和gradle配置
該模塊主要有一個UnityPlayerActivity,這是Unity官方提供的,它默認是全屏加載Unity工程導出的場景,注意,這是個示例,因此可以自定義修改它。

在這里插入圖片描述

4. 常見問題

  • 找不到 so:檢查 gradle 是否配置 abiFilters
    在這里插入圖片描述
    由于習慣了如此引用,因此將內容修改如下圖
    在這里插入圖片描述

  • 找不到 aar:檢查 dependencies 配置,確認項目級 gradle 是否包含倉庫地址。

檢查gradle文件中dependencies
在這里插入圖片描述

檢查工程的gradle(不是模塊的gradle)是否有如下配置,(最新的AS創建的工程創建后沒有如下內容)在這里插入圖片描述

模塊的gradle中添加如下內容
在這里插入圖片描述


五、Unity 與 AS 互相調用

1. Unity 調用 AS

方式1:繼承 UnityPlayerActivity

Android 端繼承 UnityPlayerActivity,Unity 通過 AndroidJavaObject 調用。
unity代碼:

AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
jo.Call ("login","這里是傳過去的參數");

Android代碼:

package com.example.test;public class MainActivity extends UnityPlayerActivity {public void login( String str )
{      }
方式2:調用靜態方法

Unity 端:

AndroidJavaClass jc = new AndroidJavaClass("com.example.test.Test");
jc.CallStatic("login", "參數");

Android 端:

public class Test {public static void login(String str) { ... }
}
方式3:調用非靜態方法 / 單例模式

Unity 通過 AndroidJavaObject 調用實例方法,或先調用靜態方法獲取單例,再調用非靜態方法。

unity代碼:


AndroidJavaObject jo = new AndroidJavaObject("com.example.test.Test"); 
jo.Call("login","");

Android代碼:

package com.example.test;public class Test{public void login( String str ) {      }

2.AS 調用 Unity

把消息發送給Unity場景中指定物體上的指定方法
UnityPlayer.UnitySendMessage(“物體名稱”, “方法名稱”, 參數);
實例:

方式1:UnitySendMessage
UnityPlayer.UnitySendMessage("GameObjectName", "MethodName", "參數");

方式2:使用 AndroidJavaProxy 實現回調通信

UnitySendMessage 通過字符串傳遞消息不同,AndroidJavaProxy 提供了一種更穩定、更結構化的通信方式。它允許 Unity 實現 Android 端定義的接口,并將接口實現作為回調傳遞給 AS,從而實現雙向通信,適合復雜場景。

步驟如下:

1. 在 AS 端定義接口
先在 Android 工程中編寫一個接口,接口方法將作為回調被 Unity 實現。

package com.example.test;public interface UnityasrEventCallback {void Speechcontent(int a);void Test1(String msg);
}

2. 在 Unity 端實現該接口
在 Unity 中創建一個 C# 腳本,定義一個類繼承 AndroidJavaProxy,并在構造方法中指定 AS 端接口的“包名+接口名”。然后實現接口中定義的方法。

public class AsrEventCallback : AndroidJavaProxy
{// 構造方法中傳入 AS 端接口的完整類名public AsrEventCallback() : base("com.example.test.UnityasrEventCallback") { }// 實現接口中的方法public void Speechcontent(int content){int a = content;Debug.Log("收到來自AS的整型回調: " + a);}public void Test1(string msg){string b = msg;Debug.Log("收到來自AS的字符串回調: " + b);}
}

3. 在 Unity 中注冊回調
在合適的生命周期方法(如 Start())中,將 AndroidJavaProxy 實例傳遞給 AS 的方法(如 setCallback)。

void Start()
{AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");// 創建代理實例AsrEventCallback asrEventCallback = new AsrEventCallback();// 將代理傳遞給 ASjo.Call("setCallback", asrEventCallback);
}

這樣,AS 端只要調用 mCallback.Test1("xxx")mCallback.Speechcontent(123),就能觸發 Unity 端的對應方法,實現回調通信。


3. Unity 調用 Android Toast 示例

Unity 直接調用 Android API
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass toast = new AndroidJavaClass("android.widget.Toast");
AndroidJavaObject context = jo.Call<AndroidJavaObject>("getApplicationContext");jo.Call("runOnUiThread", new AndroidJavaRunnable(() => {toast.CallStatic<AndroidJavaObject>("makeText", context, "Hello from Unity", toast.GetStatic<int>("LENGTH_SHORT")).Call("show");
}));
Unity 調用 AS 中的 Toast

Unity 調用:

jo.Call("testToast", "吐司!");

AS 端:

public void testToast(final String msg) {runOnUiThread(() -> Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show());
}

總結

本文完整介紹了 Unity 與 Android Studio 互相調用的實現方式

  • Unity 環境與 VS 配置
  • Unity 調用 AS aar
  • AS 調用 Unity 工程
  • 雙向通信方案(UnityPlayerActivity、靜態方法、UnitySendMessage、AndroidJavaProxy)
  • 實際示例(Toast 調用)

通過這些方法,開發者可以在 Unity 中調用 Android 原生能力,同時讓 Android 端靈活調用 Unity 的邏輯,實現高效的跨平臺應用開發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920726.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前后端聯合實現多個文件上傳

1、前端 Vue3CommonApplyBasicInfoForm.vue<script setup lang"ts" name"CommonApplyBasicInfoForm"> ...... // 文件輸入實例對象 const fileInputRef ref<HTMLInputElement | null>(null); // 選擇文件列表 const selectedFiles ref<Fi…

軟考高級--系統架構設計師--綜合知識真題解析

系列文章目錄 文章目錄系列文章目錄一、2019年真題二、2020年真題三、2021年真題四、2022年真題總結一、2019年真題 二、2020年真題 三、2021年真題 四、2022年真題 總結

“帕薩特B5鉗盤式制動器結構設計三維PROE模型7張CAD圖紙PDF圖“

摘 要本文首先對汽車制動器原理和對各種各樣的制動器進行分析,詳細地闡述了各類制動器的結構,工作原理和優缺點。再根據轎車的車型和結構選擇了適合的方案。根據市場上同系列車型的車大多數是滑鉗盤式制動器,而且滑動鉗式盤式制動器結構簡單,性能居中,設計規范,所以我選擇滑動…

SQL注入6----(其他注入手法)

一.前言 本章節來介紹一下其他的注入手法&#xff0c;也就是非常規注入手法&#xff0c;來和大家介紹一下 二.加密注入 前端提交的有些數據是加密之后&#xff0c;到了后臺在解密&#xff0c;然后再進行數據庫查詢等相關操作的&#xff0c;那么既然如 此我們也應該將注入語句…

visual studio2022 配置 PCL 1.13.1

PCL庫下載 下載鏈接&#xff1a; https://github.com/PointCloudLibrary/pcl/releases 下載這兩個。 PCL庫安裝 運行.exe文件進行安裝。 環境變量勾第二個&#xff08;其實無所謂&#xff0c;反正還要添加別的環境變量&#xff0c;這里沒選之后加也一樣&#xff09;。 安裝…

金融學-貨幣理論

前言 前面學習了什么是貨幣供給&#xff0c;貨幣供給的決定以及聯邦儲備體系在貨幣供給中所起的作用。現在我們要開始探討經濟中貨幣供給在決定價格水平與全部商品和勞務(總供給)中的作用。關于貨幣對經濟影響的研究&#xff0c;稱為貨幣理論(monetarythe-ory) 貨幣數量論 古典…

Visio繪圖——給多邊形增加連接線

每次在畫項目框圖和各類爪圖的時候&#xff0c;連接線是最煩人的&#xff0c;雖然選擇的是折線&#xff0c;單往往事與愿違。 下面就記錄一下&#xff0c;如何查找各類連接線。 1、先展開左側菜單欄&#xff0c;點擊如下所示的“&#xff1e;”2、在展開的界面&#xff0c;再次…

【開題答辯全過程】以 付費自習室系統小程序為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

開疆智能Profinet轉EtherCAT網關連接TR-Electronic傳感器配置案例

本案例是通過開疆智能研發的Profinet轉EtherCAT網關將傳感器數據傳送到PLC&#xff0c;由于兩邊設備采用協議不同&#xff0c;故而使用網關進行轉換。網關配置&#xff1a;打開網關配置軟件“EtherCAT Manager”并新建項目。根據不通網關型號也可選擇ModbusTCP&#xff0c;Ethe…

VSCode中使用Markdown

文章目錄1. 背景2. 安裝插件3. 基礎寫作與預覽4. 生成PDF文檔5. 插入代碼6. 插入圖片7. 小結1. 背景 編程技術人員&#xff0c;很多人寫作習慣用Markdown格式吧。 首先Markdown很簡單&#xff0c;第二它的層次結構特別清晰&#xff0c;再然后它對嵌入圖片、代碼的支持很優秀。…

2024全棧技術棧選型指南

前后端技術棧選擇現代前后端技術棧選擇需兼顧市場需求與個人興趣。前端領域React、Vue、Angular形成三足鼎立&#xff0c;React在大型項目占比達58%&#xff0c;Vue在小中型企業更受歡迎。TypeScript采用率年增長25%&#xff0c;已成為工程化標配。后端技術呈現多元化趨勢&…

Spring Boot 項目文件上傳安全與優化:OSS、MinIO、Nginx 分片上傳實戰

在實際的 Web 項目中&#xff0c;文件上傳是一個常見需求&#xff1a;用戶上傳頭像、企業后臺上傳資料、視頻平臺上傳大文件等等。然而&#xff0c;文件上傳也是最容易引發安全風險的功能之一&#xff0c;比如惡意腳本上傳、木馬文件偽裝、存儲空間消耗攻擊。同時&#xff0c;當…

智能安防:以AI重塑安全新邊界

傳統安防依賴人力監控與簡單報警&#xff0c;效率低下且易遺漏風險。隨著人工智能、物聯網及大數據技術的融合&#xff0c;智能安防正重新定義安全管理的范式&#xff0c;從被動響應轉向主動預警&#xff0c;成為智慧城市與數字化生活的重要基石。智能安防的核心是人工智能視覺…

【AI】【強化學習】強化學習算法總結、資料匯總、個人理解

前言&#xff1a;自己學習西湖大學趙老師的課、youtube系列的課程相關比較重要的內容&#xff0c;后續不斷再進行完善。 YouTube Serrano.academy rlhf講的很好 合集最后一個沒看 強化學習第四章 police沒一步需要無窮&#xff0c;值迭代只需要一步 收斂不一樣 值迭代:原因在于…

一鍵掌控三線資源:極簡 Shell 腳本實現 CPU·磁盤·內存可視化巡檢

目錄 前言 數值型 for 循環 語法格式 示例&#xff1a;打印 1 到 5 示例&#xff1a;打印5次Hello World 示例&#xff1a;計算 1 到 100 的累加和 遍歷型 for 循環 語法格式 示例&#xff1a;遍歷字符串列表 示例&#xff1a;遍歷數組 示例&#xff1a;遍歷文件列表…

數據結構:創建堆(或者叫“堆化”,Heapify)

目錄 最直觀的思路 更優化的思路&#xff08;自底向上的構建&#xff09; 第一步&#xff1a;重新審視問題 第二步&#xff1a;找到規律&#xff0c;形成策略 用一個實例來推演 第三步&#xff1a;編寫代碼 總結與分析 我們來深入探討“創建堆”&#xff08;或者叫“堆化…

基于 GPT-OSS 的成人自考口語評測 API 開發全記錄

1?? 需求與指標 在項目啟動前&#xff0c;我們設定了核心指標&#xff1a; 字錯率&#xff08;WER&#xff09;< 5%響應延遲 < 800 ms高可用、可擴展 這些指標將貫穿整個開發和測試流程。 2?? 數據準備 準備訓練數據是關鍵步驟&#xff0c;我們使用了 1k 條自考口…

Linux初始——基礎指令篇

Linux常用指令pwdlscdtouchmkdirrmmancpmvcatmorelesswhichwhereisaliasgrepfilezip/unzip 指令rzsztarpwd 在xshell中輸入pwd并回車&#xff0c;將輸出當前用戶所存在的目錄位置 可看到當前用戶是在/home/hhw這個目錄下 ls 在xshell中輸入ls會顯示當前目錄所包含的文件 其中…

Vue-24-利用Vue3的element-plus庫實現樹形結構數據展示

文章目錄 1 項目啟動 1.1 創建和啟動項目(vite+vue) 1.2 清理不需要的代碼 1.3 下載必備的依賴(element-plus) 1.4 完整引入并注冊(main.sj) 1.5 設置@別名(vite.config.js) 2 el-tree樹形控件 2.1 TreeComponents.vue 2.1.1 模板部分 2.1.2 類型定義(Tree) 2.1.3 樹形數據(dat…

Kubernetes 部署與發布完全指南:從 Pod 到高級發布策略

引言:告別手動,擁抱聲明式 在傳統的部署流程中,我們常常需要手動執行一系列命令:SSH 到服務器、拉取新代碼、編譯、重啟服務、檢查日志、處理錯誤…這個過程不僅繁瑣低效,而且極易出錯,難以保證環境的一致性。 Kubernetes 徹底改變了這一切。它通過一種 “聲明式” 的模…