当前位置: 首页 > news >正文

Unity 导出 AAR包 到 Android 项目并以 Fragment渲染显示

很多3D程序都是unity结合android项目开发的,比如车机,xr,数字孪生等。下面实现一个使用Unity开发3d渲染组件,并导入到现有Android项目中,通过fragment显示的例子

一、Unity 端:导出 AAR 包(核心文件)

▶ 第一步:改 Unity 导出设置

  1. 打开 Unity 项目,点击顶部菜单「File → Build Settings」。
  2. 在弹出的窗口里,左边平台列表选「Android」(如果没安装 Android 模块,先通过 Unity Hub 装一下)。
  3. 点击窗口右下角的「Player Settings」,在右侧面板改 3 个关键配置:
  • Build Type:必须选「Android Library」(选这个才会导出 AAR,不是装手机的 APK)。
  • Package Name:填个库名(比如「com. 你的名字.unitylib」,和后面 Android 项目包名像一点最好)。
  • Minimum API Level:选和你 Android 项目一样的版本(比如 API 21,避免版本不兼容)。

▶ 第二步:导出 AAR 文件

  1. 回到「Build Settings」窗口,点击「Export」按钮,选个文件夹存(比如新建个叫「Unity_AAR」的文件夹)。
  2. 等 Unity 导出完成,打开刚才选的文件夹,里面会有个叫「unity-library.aar」的文件 —— 这就是我们要的核心包。

二、Android 端:把 AAR 放进自己的项目

▶ 第一步:复制 Unity 导出的文件

  1. 打开你的 Android 项目(用 Android Studio)。
  2. 把 Unity 导出的「unity-library.aar」复制到 Android 项目的「app → libs」文件夹里(没有 libs 文件夹就自己建一个)。
  3. 再把 Unity 导出文件夹里的「AndroidManifest.xml」复制到「app → src → main」文件夹。
  4. 如果 Unity 导出文件夹里有「libs」子文件夹,把里面的文件(比如「classes.jar」)也复制到 Android 项目的「app → libs」里。

▶ 第二步:改 Android 项目配置(让项目识别 AAR)

  1. 在 Android Studio 里,打开「app → build.gradle」文件(不是根目录的 build.gradle)。
  2. 在「android」标签里加一段配置(支持 Java 8,Unity 需要):
android {// 其他原有配置不变,加下面这段compileOptions {sourceCompatibility JavaVersion.VERSION\_1\_8targetCompatibility JavaVersion.VERSION\_1\_8}
}
  1. 在「dependencies」标签里加 AAR 的依赖:
dependencies {// 引入Unity的AAR包implementation files('libs/unity-library.aar')// 引入刚才复制的其他文件(比如classes.jar)implementation files('libs/classes.jar')// 加个基础依赖(避免报错)implementation 'androidx.appcompat:appcompat:1.6.1'
}
  1. 改完后,点击顶部的「Sync Now」同步配置(等进度条走完,别让它报错)。

▶ 第三步:处理清单文件冲突(避免报错)

  1. 打开刚才复制到「app → src → main」里的「AndroidManifest.xml」。
  2. 删掉里面的「」标签(因为你的 Android 项目已经有自己的 application 配置了,留着会冲突)。
  3. 保留里面的「权限声明」(比如<uses-permission android:name="android.permission.INTERNET" />)和「UnityPlayerActivity 声明」(比如<activity android:name="com.unity3d.player.UnityPlayerActivity" ... />)—— 这些是 Unity 运行需要的。

三、用 Fragment 显示 Unity 画面(关键步骤)

▶ 第一步:写个 Unity 专属的 Fragment 类

  1. 在 Android 项目里新建一个 Kotlin 类,名字叫「UnityFragment」(随便起,好记就行)。
  2. 把下面的代码复制进去(代码里有注释,照着用就行):
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.unity3d.player.UnityPlayer
class UnityFragment : Fragment() {
// Unity的核心对象,用来显示画面
private lateinit var unityPlayer: UnityPlayer
// 创建Fragment的视图(把Unity画面放进来)override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {// 初始化UnityPlayerunityPlayer = UnityPlayer(requireContext())// 把Unity的画面作为Fragment的视图返回return unityPlayer.view
}// 下面3个方法是生命周期同步,必须加!不然Unity会崩溃override fun onResume() {super.onResume()unityPlayer.resume() // Unity恢复运行}override fun onPause() {super.onPause()unityPlayer.pause() // Unity暂停运行}override fun onDestroy() {unityPlayer.quit() // Unity退出,释放内存(很重要,不然会内存泄漏)super.onDestroy()}
}

▶ 第二步:在 Activity 里加载这个 Fragment

  1. 打开你要显示 Unity 的 Activity 的布局文件(比如「activity_main.xml」),加一个容器(用来放 Fragment):
\<!-- 其他布局代码不变,加下面这段 -->
\<FrameLayout
android:id="@+id/unity\_container"
android:layout\_width="match\_parent"
android:layout\_height="300dp" /> \<!-- 高度可以自己调,比如match\_parent占满屏幕 -->
  1. 打开这个 Activity 的 Kotlin 代码(比如「MainActivity.kt」),在「onCreate」方法里加加载 Fragment 的代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\_main)
// 加载UnityFragment到容器里
supportFragmentManager.beginTransaction().replace(R.id.unity\_container, UnityFragment()) // 容器ID和Fragment类对应.commit() // 执行加载
}

四、注意事项(别踩坑)

  1. 版本要兼容:Unity 的「Minimum API Level」和 Android 项目的「minSdkVersion」必须一样,不然会报错。
  2. 生命周期别漏:Fragment 里的「onResume」「onPause」「onDestroy」必须加,不然 Unity 画面会卡住或崩溃。
  3. 内存要释放:退出 Fragment 时,「unityPlayer.quit ()」一定要执行,不然手机内存会被占满。
http://www.dtcms.com/a/491710.html

相关文章:

  • 把 AI“种”进闪存:基于极值量化与分块蒸馏的 7B 大模型 U 盘部署实战
  • 中兴电信B860AV3.2-T/B860AV3.1-T2(S905L3SB)2+8G_安卓9.0_线刷固件包
  • 网站建设主要工作内容动漫制作专业一定要艺术生吗
  • .livp,.HEIC格式图片转换成jpg格式图片
  • NewStarCTF2025-Week1-Web
  • 网站根目录 本地共享阿里指数在哪里看
  • 浏阳市商务局网站溪江农贸市场建设有什么平台可以发广告
  • FPGA强化-VGA显示设计与验证
  • 【2025最新】ArcGIS for JavaScript 快速实现热力图渲染
  • 怎么设置网站的logowordpress通知邮件美化
  • SpringCloud-Gateway实战使用与深度源码分析
  • 上海网站建设|网站制作浙江新手网络推广
  • 健康管理实训室厂家报价:精准明细,按需提供
  • Git学习笔记(三)
  • 通达信组合平台
  • 怎么做微网站推广泉州建设银行网站
  • 企业网站形象建设企业申请完域名以后 怎么把网站运行起来
  • 序列的力量——Python 内置方法的魔法解密
  • 跨数据源操作
  • 数据库圣经——第三章CRUD(一)
  • 信创学习小手册【第一天】
  • 动漫网站建设规划书模板制作网站主要包括哪些步骤
  • 基于Vue社区共享游泳馆预约系统n897q36e (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • PyTorch Dataloader工作原理 之 default collate_fn操作
  • 2022年英语笔记
  • 东莞市的网站公司哪家好shopnc
  • 建站工具上市家居网站建设行业现状
  • 三、配置MapReduce
  • JavaScript基础提升【二】
  • 珠海网站建设培训班贵州省健康码二维码图片下载