unity与android拓展

news2025/2/5 12:46:08

一.AndroidStudio打包

1.通过Unity导出Android Studio能够打开的工程

步骤

        1.设置导出基本信息:公司名、游戏名、图标、包名等关键信息

        2.在File——>Build Settings中,勾选 Export Project 选项

        3.点击Export 导出按钮

2.在Android Studio中打开Unity导出的工程

 步骤

        1.打开Android Studio

        2.新选择 打开工程

        3.选择 之前导出的对应文件夹

        4.弹出提示时,使用Android Studio中的 Android SDK,可以避免打包失败

        5.等待工程加载结束

        6.更新Gradle版本,保证之后打包成功

3.使用Android Studio生成应用程序apk

步骤

        1.在 工具栏——>Build——>Build Bundle...——>Build APK

         构建一次工程,保证构建成功,根据报错解决问题

         常见问题:

         1.The option 'android.enableR8' is deprecated 由于新版本Gradle默认使用R8混淆

           所以不需要这个选项设置了

           在Project选项中 找到 gradle.properties 删除 android.enableR8

         2.SDK Tools 版本不匹配

           更新SDK使用的路径,使用Android Studio自己的路径,或者更新SDK

        2.在 工具栏——>Build——>Build Bundle...——>Generate Signed Bundle

         发布APK,可以设置密钥库相关内容后进行打包即可

        3.测试生成的apk文件

4.总结

 如果不需要将Unity功能嵌入到Android项目中进行二次开发

        我们一般不使用该种打包方式

        直接在Unity中进行打包更加的方便

        我们只需要保证能够正常通过Android Studio打包Unity导出的工程即可

二.Android开发原理

1.Android应用程序的基本构成

 1.Android SDK

         提供了用于开发Android应用程序的各种API和工具

        2.编程语言

         使用Java或者Kotlin语言进行开发,他们提供了丰富的库和API

        3.XML配置文件

         Android应用程序使用XML来定义UI布局、样式和资源信息等

        4.应用程序组件

         Android应用程序有四种组件组成:

         4-1:Activity(活动)

             主要用于实现用户界面,代表一个屏幕或窗口,包含了各种UI组件,按钮,文本,输入框等等

         4-2:Service(服务)

             是一种可以在后台执行长时间运行操作的组件,没有用户界面,一般用于处理和交互无关的逻辑

             比如:上传、下载、音乐播放等

         4-3:Broadcast Receiver(广播接收器)

             主要用于接受系统或者其他应用程序发出的广播消息

             消息可以来自系统事件(比如网络连接变化、设备启动等),也可以来自其它应用程序

         4-4:Content Provider(内容提供程序)

             用于管理应用程序数据,可以让其它应用程序或系统访问本应用中的数据,也可以让本应用访问其它应用或系统的数据

             比如用于存储应用程序数据,图片、音频、视频等

        等等

        在开发Android应用程序时,其实主要就是在编写基于这四种组件的逻辑

        日常开发时,更多的就是在利用Android SDK中的API 开发Activity活动组件(类似游戏中UI界面逻辑开发)

        如果有其他后台或者拓展功能,才会使用其它3种组件

2.AndroidManifest.xml文件的作用

它是Android应用程序的应用清单文件

        每个应用程序都必须包含一个,并且文件名必须是AndroidManifest.xml

        该文件中包含了应用程序的配置信息,Android系统会根据该配置来运行应用程序

        该文件中包含的重要信息有:

        1.应用程序包含的四大组件的内容(Activity,Service,Broadcast Receiver,Content Provider)

        2.应用程序的权限(存储权限、互联网访问权限等等)

        3.应用程序元数据(程序名称、版本号、图标、包名等等)

        4.应用程序启动信息(默认启动哪一个Activity)

        常用标签作用:

        manifest标签:主要包含包名、版本号等等

        uses-permission标签:应用程序权限

        application标签:应用程序各组件包含在其中,还可以配置一些图标、文本、样式等等信息

        activity标签:Activity组件的具体信息

        meta-data标签:为Activity提供元数据,可以通过API获取该数据

        intent-filter标签:为组件声明意图(intent),其中还包含action(意图类型)和category(意图类别)两个子标签等等

3.了解这些对于我们的意义

了解了Android开发的这些基本原理信息后

        之后在学习相互内嵌式,我们就能明白我们在做什么

        Unity程序在打包到Android平台后,其实就是作为一个Activity存在的

        之后我们在和Android相互嵌入式,我们只需要把Unity作为一个Activity单位来处理即可

三.Unity中嵌入android内容

1.Unity中嵌入Android内容指什么

 在Android开发中Activity(活动)就是我们看到的一个界面(屏幕)

 那么所谓的Unity中嵌入Android内容就是通过Unity打开Android中制作好的Activity

 让Unity可以和Android中制作的功能进行交互

2.Activity创建

 在Android项目中新建一个Activity并生成aar包

        1.打开我们之前学习Unity和Android交互中建立的Android工程

        2.在com.tarkr.mytestgame上点击右键,新建一个空的Activity

        3.检查AnadroidManifest.xml中是否多出了对应的Activity配置

        4.在MainActivity中添加函数,用于打开新建的Activity

        5.生成aar包

3.Unity中进行交互处理

  将aar包导入Unity后进行相关设置后导出包

        1.按照之前讲解的知识点,删除aar包中需要删除的内容

        2.书写对应交互逻辑,用于测试打开Android中的Activity

        3.在Unity中导出包,用Android Studio打开

        注意:如果要实现内嵌Android Activity,我们需要在Unity中导出安卓工程包后使用Android Studio进行打包

            主要原因是,Unity中无法下载关联的相关包,会导致打包出去的内容报错

4.使用Android Studio打包

使用AndroidStudio打开我们通过Unity生成的Android包

        利用我们之前学习的Android Studio打包的相关知识,进行构建,打包

        根据报错,来针对性的进行修改和配置

        可能出现的报错:

        1.打包出去后,运行后闪退,找不到对应类。

         解决方案:引用缺失的包,重新打包

        2.安装后出现两个图标。

         解决方案:修改AnadroidManifest.xml配置文件,移除LAUNCHER相关配置

        3.界面xml报错。

         解决方案:需要修改构建配置文件 加一个对应的引用 然后还需要在属性配置当中允许使用 Androidx

        4.如果出现了Appcompat报错。解决方案:

         3-1.修改配置文件 加一个android:theme = "@style/Theme.AppCompat.Dialog"

         3-2.让我们新建的Activity直接继承Activity

        等等(根据具体报错内容,查询资料进行解决)

5.总结

  Unity中嵌入Android内容的关键点就是

        最终打包时,我们需要在Unity中打包出安卓工程包后

        再使用Android Studio进行打包

        根据各种报错信息来一步步的解决问题

        缺少什么就添加什么,配置有问题就修改配置

四.Android嵌入unity内容

1.Android中嵌入Unity内容指什么

 在进行Android开发时,可能会有需求显示Unity开发的3D内容

        一开始我们启动的是Android应用程序中的Activity

        通过Activity我们想要打开Unity开发的内容进行展示

        这就是Android中嵌入Unity内容的意思

        注意:Android中嵌入Unity存在限制问题,退出Unity所在的Activity会退出整个App

            所以如果存在Android和Unity混合开发的情况,建议采用上节课的Unity中嵌入Android的方式

2.新建Unity测试项目

1.在该项目中添加一些测试内容,比如方块旋转

2.将该项目发布为Android工程(不用设置包名等)

3.新建Android测试项目

 1.新建一个Android工程

        2.将Unity导出的android项目内容中的 unityLibrary 文件夹拷贝到Android工程中

        3.将Unity导出的android项目内容中的 launcher 文件夹中的res中的内容拷贝到unityLibrary文件夹中合并

        4.修改安卓工程中的 settings.gradle 文件,在最后添加 include ‘:unityLibrary’ 并 点击右上角同步

        5.修改安卓工程中的 gradle.properties 文件,在最后添加 unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist 并再次同步

        6.修改安卓工程中 app 文件夹中的 build.gradle 文件,在依赖项中 添加 implementation project(':unityLibrary')

        7.在主Activity中添加一个用于跳转的按钮,并为该按钮添加监听事件,用于打开Unity的Activity

        8.修改两个 AndroidManifest.xml 文件,让主Activity的作为主Activity,删除Unity相关Activity的设置

4.打包测试

 设置密钥,进行打包

 用模拟器进行测试

5.总结

当我们要进行Android和Unity混合开发时

建议大家采用上节课的Unity中嵌入Android内容

主要原因是,Android中嵌入Unity内容限制较大,当我们切换到Unity的Activity后

如果想要关闭当前Unity Activity返回之前的,会让整个App退出,不能达到我们想要的需求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

几种常见的javascript设计模式

摘要 最近开发HarmonyOSApp,使用的Arkts语言,此语言类似后端C#语言风格,同时兼顾写后端接口的我突然想总结一下近8年前端开发中无意中使用的设计模式,我们用到了却不知属于哪些,下面和大家分享一下。 什么是前端设计…

2.4特征预处理(机器学习)

2.4特征预处理 2.4.1 什么是特征预处理 通过 一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。 1 包含内容 数值型数据的无量纲化: 归一化 标准化 2 特征预处理API sklearn.preprocessing 为什么要进行归一化/标准化? 特征的单…

学习笔记052——Spring Boot 自定义 Starter

文章目录 Spring Boot 自定义 Starter1、自定义一个要装载的项目2、创建属性读取类 ServiceProperties3、创建 Service4、创建自动配置类 AutoConfigration5、创建 spring 工程文件6、将项目打成 jar 包7、jar 打包到本地仓库8、配置application.yml Spring Boot 自定义 Starte…

重学设计模式-建造者模式

本文介绍一下建造者模式,相对于工厂模式来说,建造者模式更为简单,且用的更少 定义 建造者模式是一种创建型设计模式,它使用多个简单的对象一步一步构建成一个复杂的对象。这种模式的主要目的是将一个复杂对象的构建过程与其表示…

复现SMPLify-X: Ubuntu22.04, Cuda-11.3, GPU=3090Ti

Env: 3090Ti CUDA 最低支持版本需要>cuda-11.1 Ubuntu 22.04 Installation: Installing CUDA11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run sudo sh cuda_11.3.0_465.19.01_linux.run …

Milvus×OPPO:如何构建更懂你的大模型助手

01. 背景 AI业务快速增长下传统关系型数据库无法满足需求。 2024年恰逢OPPO品牌20周年,OPPO也宣布正式进入AI手机的时代。超千万用户开始通过例如通话摘要、新小布助手、小布照相馆等搭载在OPPO手机上的应用体验AI能力。 与传统的应用不同的是,在AI驱动的…

JAVA |日常开发中读写XML详解

JAVA |日常开发中读写XML详解 前言一、XML 简介二、在 Java 中读取 XML2.1 使用 DOM(Document Object Model)方式读取 XML2.2 使用 SAX(Simple API for XML)方式读取 XML 三、在 Java 中写入 XML3.1 使用 DOM 方式写入…

GEOBench-VLM:专为地理空间任务设计的视觉-语言模型基准测试数据集

2024-11-29 ,由穆罕默德本扎耶德人工智能大学等机构创建了GEOBench-VLM数据集,目的评估视觉-语言模型(VLM)在地理空间任务中的表现。该数据集的推出填补了现有基准测试在地理空间应用中的空白,提供了超过10,000个经过人工验证的指…

南昌榉之乡托养机构解读:自闭症与看电视并无必然联系

在探讨自闭症的成因时,有人会问:自闭症是多看电视引起的吗?今天,就让我们来看看南昌榉之乡托养机构对此有何见解。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校,一直致力于为大龄自闭症患者提供专业的支持…

LabVIEW MathScript工具包对运行速度的影响及优化方法

LabVIEW 的 MathScript 工具包 在运行时可能会影响程序的运行速度,主要是由于以下几个原因: 1. 解释型语言执行方式 MathScript 使用的是类似于 MATLAB 的解释型语言,这意味着它不像编译型语言(如 C、C 或 LabVIEW 本身的 VI&…

基于eFramework车控车设中间件介绍

车设的发展,起源于汽车工业萌芽之初,经历了机械式操作的原始粗犷,到电子式调控技术的巨大飞跃,到如今智能化座舱普及,远程车控已然成为汽车标配,车设功能选项也呈现出爆发式增长,渐趋多元繁杂。…

使用 AWR 进行 Exadata 性能诊断 - 2018版

本文和之前的使用 AWR 进行 Exadata 性能诊断是非常类似的,理论部分几乎一样,但案例部分是不同的,其价值也在于此。前文是基于Exadata X10,本文是基于Exadata X5。当然,型号并不重要,重要的是分析过程。 本…

【AI系统】计算与调度

计算与调度 上一篇文章我们了解了什么是算子,神经网络模型中由大量的算子来组成,但是算子之间是如何执行的?组成算子的算法逻辑跟具体的硬件指令代码之间的调度是如何配合?这些内容将会在本文进行深入介绍。 计算与调度 计算与…

JavaSE学习心得(APL与算法篇)

常用APL和常见算法 前言 常用APL Math System Runtime Object ​编辑浅克隆 深克隆 Objects Biginteger 构造方法 成员方法 底层存储方式 Bigdecimal 构造方法 Bigdecimal的使用 底层存储方式 ​编辑正则表达式 两个判断练习 两个爬取练习 贪婪爬取和非贪…

C++ ——— 引用的概念以及特性

目录 引用的概念 引用在实际代码中的作用 引用的特性 1. 引用在定义时必须初始化 2. 一个变量可以有多个引用 3. 可以给别名再次取别名,或者多次取别名 4. 引用一旦引用了实体,就不能再引用其他实体了 引用的概念 引用不是新定义一个变量&#x…

Linux-异步IO和存储映射IO

异步IO 在 I/O 多路复用中,进程通过系统调用 select()或 poll()来主动查询文件描述符上是否可以执行 I/O 操作。而在异步 I/O 中,当文件描述符上可以执行 I/O 操作时,进程可以请求内核为自己发送一个信号。之后进程就可以执行任何其它的任务…

嵌入式入门Day23

数据结构Day4 操作受限的线性表栈基本概念顺序栈顺序栈结构创建顺序栈判空和判满栈扩容入栈出栈遍历销毁栈 链式栈队列基本概念顺序队列循环顺序队列定义循环队列的创建循环顺序队列的判空和判满循环顺序队列的入队循环顺序队列的遍历循环顺序队列的出队循环顺序队列的销毁 链式…

C语言实验 一维数组

时间:2024.12.3 一、实验 7-1 交换最小值和最大值 #include<stdio.h> int main() {int n, a[10], i, min = 0, max = 0;scanf("%d", &n);for (i = 0; i < n; i++){scanf("%d",&a[i]);}for (i = 0; i < n; i++){if (a[min] > a[i…

聚合支付系统官方个人免签系统三方支付系统稳定安全高并发

系统采用fastadmin框架独立全新开发&#xff0c;安全稳定,系统支持代理、商户、码商等业务逻辑。 针对最近一-些JD&#xff0c;TB等业务定制&#xff0c;子账号业务逻辑API 非常详细&#xff0c;方便内置对接! 注意&#xff1a;系统没有配置文档很使用教程&#xff0c;不清楚…

HTMLCSS 奇幻森林:小熊的甜蜜蛋糕派对大冒险

这个 HTML 页面包含了一个背景、多个下落的蛋糕图片和一个左右移动的loopy图片,实现了一个小熊吃蛋糕的效果 演示效果 HTML&CSS <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>ideal life</title><style…