unity与android拓展

一.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.mzph.cn/news/888427.shtml

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

相关文章

计算机网络期末复习-part1-概述

1、互联网的组成 互联网由两大块组成。 1、边沿部分:由所有连接在互联网上的主机组成,是用户直接使用的部分。 2、核心部分,由大量网络和路由器组成,为边缘部分提供服务。 2、数据传送阶段的三种交换方式的主要特点 1、电路交…

【MySQL 进阶之路】索引的使用

5.索引的使用规则 在数据库管理系统(DBMS)中,索引是提高查询效率的关键机制之一。MySQL索引优化是指通过设计、调整和选择合适的索引策略,以提高数据库的查询性能和降低资源消耗。以下是一些关键的索引使用规则: 1. …

matlab中disp,fprintf,sprintf,display,dlmwrite输出函数之间的区别

下面是他们之间的区别: disp函数与fprintf函数的区别 输出格式的灵活性 disp函数:输出格式相对固定。它会自动将变量以一种比较直接的方式显示出来。对于数组,会按照行列形式展示;对于字符串,直接原样输出并换行。例如…

【数据中心建设资料】数据中心安全建设解决方案,数据中心整理解决方案,数据中心如何做到安全保障,数据中台全方案(Word全原件)

第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏系统 1.3.8…

Go学习:变量

目录 1. 变量的命名 2. 变量的声明 3. 变量声明时注意事项 4. 变量的初始化 5. 简单例子 变量主要用来存储数据信息,变量的值可以通过变量名进行访问。 1. 变量的命名 在Go语言中,变量名的命名规则 与其他编程语言一样,都是由字母、数…

使用ensp搭建内外互通,使用路由跨不同vlan通信。

1.网络拓扑图 2.规则 (1)允许 (自己)ping通内外网,内外网随便一个pc就可以. (2) 允许(电信)ping通内外网,内外网随便一个pc就可以 (时间问题不做…

slam学习笔记6---样例展示雅可比手推过程

背景:一直在使用模板、自动化求导,对于背后雅可比推导只剩一个基本概念,有必要好好梳理巩固一下。本人水平有限,若推导过程有误,欢迎评论区提出。 假设一个二维slam问题,使用欧式距离观测模型,…

基于Vue实现的移动端手机商城项目 电商购物网站 成品源码

📂文章目录 一、📔网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站演示 📸部分截图 🎬视频演示 五、⚙️网站代码 🧱项目结构 💒vue代码预览 六、🔧完整…

使用 postman 传递 binary 类型的图片到后端接口遇到的坑

使用 psotman 传 binary 类型图片报错: -2024-12-04 [http-nio-9090-exec-1] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required r…

SQL 优化经历:从 30248.271s 到 0.001s

今天分享一篇SQL优化的文,带你深入了解如何提升查询效率、降低系统负载。 无论你是数据库管理员还是开发者,都不能错过这份关于SQL性能优化的实用指南。让我们一起穿越数据库迷宫,发现隐藏在代码背后的优化黄金点! 场景 用的数据…

开发者如何使用GCC提升开发效率Opencv操作

看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…

JavaCV中openCV的拉普拉斯滤波器处理

1、javacv 1.5.10版本 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.opencv.opencv_core.Mat;import javax.swing.*; import java.awt.image.BufferedImage;import static org.bytedeco.openc…

PyQt 中的无限循环后台任务

在 PyQt 中实现一个后台无限循环任务,需要确保不会阻塞主线程,否则会导致 GUI 无响应。常用的方法是利用 线程(QThread) 或 任务(QRunnable 和 QThreadPool) 来运行后台任务。以下是一些实现方式和关键点&a…

项目集成篇:springboot集成redistemple实现自定义缓存,并且可以设置过期时间

在Spring Boot中集成Redis并使用RedisTemplate实现自定义缓存功能,同时能够设置缓存项的过期时间,可以通过以下步骤来完成。我们将创建一个服务层方法,该方法将使用RedisTemplate直接与Redis交互,并为每个缓存项设置特定的过期时间…

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie,token,session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤,⽐如⼏万条数据,放在⼀个⻚⾯显⽰的话显然不友好,这时候就需要采⽤分⻚…

CentOS 离线环境安装 Python2

CentOS离线环境安装Python2,可能在编译源码时因缺少各种依赖而无法编译成功。 此时可以找一台有网的电脑(可以是Linux虚拟机),使用yum管理器的打包命令将Python2的安装包及依赖全部打包成rpm,然后拷贝到离线机器上安装…

ED6H系列FPGA口袋实验室

一、产品概述 ED6H系列FPGA口袋实验室是中科亿海微自主研发的基于“FPGA在线教学平台”的教学实践工具,专为高校电子相关专业师生打造,旨在为高校师生创造更具创新性与高效性的教学场景。具有高集成度、小巧便携、可扩展设计及自主可控等特点。本系列共…

实验三:Mybatis-动态 SQL

目录: 一 、实验目的: 通过 mybatis 提供的各种标签方法实现动态拼接 sql 二 、预习要求: 预习 if、choose、 when、where 等标签的用法 三、实验内容: 根据性别和名字查询用户使用 if 标签改造 UserMapper.xml使用 where 标签进行…

pytorch加载预训练权重失败

问题 给当前模型换了个开源的主干网络,并且删除了某些层后,但是发现预训练权重一直加载不上。strict为True时加载报错,strict为False时又什么都加载不上,然后不知道哪里出问题了。 解决 当strict为False时,load_sta…

python 笔记之线程同步和死锁

同步: 共享数据: 如果多个线程共同对某个数据修改,则可能出现不可预测的结果,为了保证数据的正确性,需要对多个数据进行同步 同步:一个一个的完成,一个做完另一个才能进来 效率会降低 使用Thre…