Unity跨平台构建快速回顾

知识点来源:人间自有韬哥在,豆包

目录

一、发布应用程序

1. 修改发布必备设置

1.1 打开设置面板

在Unity编辑器中,依次点击 File -> Build Settings,接着在弹出的窗口里点击 Player Settings 按钮,这将打开 Player Settings 面板。

1.2 修改公司名、游戏项目名、版本号和默认图标

  • 公司名 :在 Player Settings 面板的 Identification 部分,找到 Company Name 字段,把它修改为你公司的名称。
  • 游戏项目名 :同样在 Identification 部分,将 Product Name 字段修改为你的游戏项目名称。
  • 版本号 :还是在 Identification 部分,修改 Version 字段,以反映游戏当前的版本号,版本号通常遵循 主版本号.次版本号.修订号 的格式,例如 1.0.0
  • 默认图标 :在 Other Settings 下的 Icon 部分,点击 + 按钮,选择你准备好的图标文件(通常为 PNG 格式)。Unity 支持多种尺寸的图标,你可以上传不同尺寸的图标以适配不同的设备。

1.3 修改 Package Name 和 Minimum API Level

  • Package Name :在 Other Settings 部分,找到 Package Name 字段,这个字段是应用在 Android 系统中的唯一标识符,一般采用反向域名的格式,例如 com.yourcompany.yourgame,必须对其进行修改设置。
  • Minimum API Level :同样在 Other Settings 部分,找到 Minimum API Level 字段,根据你的游戏兼容性需求选择合适的 Android API 级别。通常建议选择一个较广泛支持的 API 级别,但也要考虑到你使用的功能对 API 级别的要求。

2. 发布应用程序

2.1 配置 Build Settings

Build Settings 窗口中,选择 Android 平台,然后点击 Switch Platform 按钮,等待 Unity 完成平台切换。

2.2 选择发布选项

  • Build System :通常选择 Gradle
  • Target SDK Version:根据你的需求选择合适的 Android SDK 版本。
  • Scripting Backend :可以选择 IL2CPP 以获得更好的性能,或者选择 Mono 以获得更广泛的兼容性。

2.3 构建 APK 文件

点击 Build 按钮,选择一个保存 APK 文件的目录,然后等待 Unity 完成构建过程。构建过程可能需要一些时间,具体取决于项目的大小和复杂度。

3. 测试发布的 APK 文件

3.1 使用 Android 设备进行测试

  • 开启 USB 调试 :在 Android 设备的 设置 -> 关于手机 中,多次点击 版本号 开启开发者选项,然后在开发者选项中开启 USB 调试 功能。
  • 连接设备:使用 USB 数据线将 Android 设备连接到电脑。
  • 安装 APK 文件:在电脑上找到之前构建好的 APK 文件,将其复制到 Android 设备上,然后在设备上找到该文件并点击安装。
  • 测试游戏:安装完成后,在设备的应用列表中找到并打开游戏,进行全面的测试,确保游戏的各项功能正常运行。

3.2 使用 Android 模拟器进行测试

  • 安装模拟器:可以使用 Android Studio 自带的模拟器,或者第三方模拟器如 BlueStacks。
  • 启动模拟器:启动模拟器并等待其完全启动。
  • 安装 APK 文件:将 APK 文件拖放到模拟器窗口中,按照提示完成安装。
  • 测试游戏:安装完成后,在模拟器的应用列表中找到并打开游戏,进行测试。

二、发布界面参数介绍

1.1.BuildSettings生成设置

设置项 描述 可选值及说明
Texture Compression(纹理压缩) 设置发布后的纹理压缩格式 1. Use Player Settings:使用在播放器设置中设置的纹理压缩格式 2. ETC:使用ETC格式 3. ETC2:使用ETC2格式,安卓常用,支持透明通道,老设备可能不支持 4. ASTC:使用ASTC格式 5. DXT:使用DXT格式 6. PVRTC:使用PVRTC格式 可统一设为ETC2,并在ETC2 fallback设置不支持时的替代方式
ETC2 fallback(ETC2回退) 当Unity用于不支持ETC2的安卓设备时的RGBA纹理格式 1. 32 - bit:32位,以全分辨率存储RGBA纹理,质量最高,内存占用最多 2. 16 - bit:16位,以全分辨率存储RGBA纹理,质量较低,内存占用相对较少 3. 32 - bit, half resolution:32位,半分辨率,纹理会模糊,内存占用较小 非ETC2压缩,大多用32 - bit备用,取决于GPU支持
Export Project(导出项目) 勾选后,将Unity项目导出为可导入Android Studio的Gradle项目 -
Symlink Sources(符号链接源) 当勾选Export Project时才能勾选,决定是否在Unity和导出的Gradle项目之间共享Java和Kotlin源文件 启用后利于测试和迭代Java和Kotlin代码,重新导出时更改会保留,适合二次开发
Build App Bundle (Google Play)(生成应用程序资源包) 是否将应用程序作为Android应用捆绑包(AAB) 1. 启用:发布AAB,可配合安卓二次开发 2. 禁用:发布APK,可直接安装
Create symbols.zip(创建符号压缩文件) 符号文件可帮助调试应用程序 1. Disabled:不生成 2. Public:生成公共符号包,包含解析函数地址信息,包小于调试符号包 3. Debugging:生成调试符号包,含完整调试信息和符号表,可解析堆栈、附加调试器
Run Device(运行设备) 指定在哪个附加设备上测试生成 连接新设备或列表无设备时,点击Refresh刷新
Build to Device(构建到设备) 不创建完整构建,将修改文件直接部署到设备 速度快,方便调试
Development Build(开发构建) 是否包含脚本调试符号和性能分析器到项目中 勾选可调试应用程序
Autoconnect Profiler(自动连接分析器) 是否自动将分析器连接到生成的应用程序 -
Deep Profiling(深度分析) 是否启用深度剖析在分析器中 启用可返回详细分析数据,但会降低脚本执行速度
Script Debugging(脚本调试) 是否允许调试应用程序的脚本文件 Wait For Managed Debugger:程序运行脚本代码前是否等待调试器连接
Compression Method(压缩方法) Unity在构建时压缩项目中数据的方式 1. Default:默认用ZIP,压缩效果略好,解压慢 2. LZ4:快速压缩格式,提高加载时间 3. LZ4HC:LZ4高压缩版本,构建慢,发布版本效果好,提高加载时间
Max Texture Size(最大的纹理大小) 用于本地开发时导入纹理的最大尺寸 减小可加快资源导入和平台切换
Texture Compression(纹理压缩相关选项) 选择可加快资源导入和平台切换 1. No Override:使用默认设置 2. Force Fast Compressor:强制快速压缩 3. Force Uncompressed:强制解压缩

2.PlayerSettings

设置项 分类 描述 可选值及说明
icon(图标设置) 基础设置 设置在设备上显示的应用图标 1. Adaptive:运行在 Android 8.0 及以上版本设备的应用图标 2. Round:运行在 Android 7.1 及以上版本设备的应用图标 3. Legacy icons:运行在 Android 7.1 以下版本设备的应用图标
Resolution and Presentation(分辨率和演示设置) 基础设置 - -
Fullscreen Mode(全屏模式) 分辨率和演示设置 - 1. Fullscreen Window:全屏窗口,导航栏始终隐藏,应用内容可能缩放,有黑边 2. Windowed:窗口模式,大小取决于应用分辨率
Default Window Width 分辨率和演示设置 应用程序窗口的默认窗口宽度 单位为像素
Default Window Height 分辨率和演示设置 应用程序窗口的默认窗口高度 单位为像素
Minimum Window Width 分辨率和演示设置 应用程序窗口的最小宽度 单位为像素
Minimum Window Height 分辨率和演示设置 应用程序窗口的最小高度 单位为像素
Resizable Window(可调整大小的窗口) 分辨率和演示设置 设置用户是否可调整应用窗口大小,可在 Android 和平板应用中启用多窗口功能 详情见 Android Developers
Hide Navigation Bar 分辨率和演示设置 是否隐藏顶部显示的导航栏 -
Render outside safe area 分辨率和演示设置 是否使用所有可用屏幕控件渲染,包括刘海区域 -
Optimized frame Pacing 分辨率和演示设置 是否均匀分布帧以减小帧率方差,启用后体验更流畅 -
Resolution Scaling Mode(分辨率缩放模式) 分辨率和演示设置 - 1. Disabled:禁用,应用以设备本机屏幕分辨率呈现 2. Fixed DPI:使用 API 应用分辨率缩放,优化性能和电池寿命
Target DPI 分辨率和演示设置 若设备本机屏幕 DPI 高于此值,Unity 降低应用分辨率匹配设置 计算方式:Min(Target DPI * Factor / Screen DPI,1),Factor 是 Quality 质量设置中 Resolution Scaling Fixed DPI Factor 参数
Reset resolution on window resize 分辨率和演示设置 本机窗口大小更改时,是否将屏幕分辨率设为新的本机窗口大小,若为 Fixed DPI 则重新计算分辨率 -
Blit Type(光高类型) 分辨率和演示设置 是否使用 Blit 将最终图像呈现在屏幕上 1. Always:Unity 渲染到屏幕外缓冲区,再用 Blit 复制到设备帧缓冲区 2. Never:Unity 渲染到设备操作系统提供的帧缓冲区,失败有警告,通常更快但不兼容所有设备 3. Auto:先渲染到设备提供的帧缓冲区,失败则用 Blit 呈现
Supported Aspect Ratio(支持的纵横比) 分辨率和演示设置 - -
Aspect Ratio Mode 分辨率和演示设置 指定应用支持的最大纵横比,设备纵横比大于此值时,Unity 用此纵横比并添加黑条 1. Legacy Wide Screen(1.86):支持 Android 传统宽屏宽高比 2. Native Aspect Ratio:支持 Android 本机宽高比 3. Custom:自定义纵横比
Up To 分辨率和演示设置 选择自定义纵横比时可自行设置 -
Orientation(屏幕取向) 分辨率和演示设置 - -
Default Orientation 分辨率和演示设置 指定应用使用的屏幕方向 1. Portrait:竖屏,应用窗口底部和屏幕底部对齐 2. Portrait Upside Down:竖屏倒置,应用窗口底部和屏幕顶部对齐 3. Landscape Right:右横屏,应用窗口右侧和屏幕底部对齐 4. Landscape Left:左横屏,应用窗口左侧和屏幕底部对齐 5. Auto Rotation:自动旋转,可勾选允许的方向
Use 32 - bit Display Buffer 分辨率和演示设置 显示缓冲区是否保存 32 位颜色值而非 16 位,后期处理有条纹或需 Alpha 值时启用 某些后期处理效果需此设置,因以相同格式创建渲染纹理
Disable Depth and Stencil 分辨率和演示设置 是否禁用深度和模板缓冲区 -
Render Over Native UI 分辨率和演示设置 是否在 Android 或 iOS 的本机 UI 上渲染,生效需相机清除标志设为使用 Alpha 值低于 1 的纯色 -
Show Loading Indicator(显示加载指示器) 分辨率和演示设置 指定加载指示器是否显示及显示方式 1. Don't Show:不显示加载指示条 2. Large:显示大的加载指示条 3. Inversed Large:显示大的加载指示条,颜色翻转 4. Small:显示小的加载指示条 5. Inversed Small:显示小的加载指示条,颜色翻转
Splash Image(启动图像设置) 基础设置 - -
Virtual Reality Splash Image 启动图像设置 虚拟现实的初始屏幕设置 -
Show Splash Screen 启动图像设置 是否显示启动图像,收费版本可修改,免费版本不能改 -
Preview 启动图像设置 预览启动图像 -
Splash Style(启动风格) 启动图像设置 - 1. Dark on Light:暗到亮 2. Light on Dark:亮到暗
Animation(启动图像动画效果) 启动图像设置 - 1. Static:静态不动 2. Dolly:由小变大 3. Custom:自定义
Draw Mode(绘制模式) 启动图像设置 - 1. Unity Logo Below:Unity Logo 显示在前 2. All Sequential:所有按顺序 3. Logos:可添加 Logo 图片按顺序显示
Overlay Opacity 启动图像设置 覆盖不透明度 -
Background Color 启动图像设置 背景颜色 -
Blur Background Image 启动图像设置 是否模糊背景图像 -
Background Image 启动图像设置 背景图像 -
Alternate Portrait Image 启动图像设置 备选图像 -
Static Splash Image 启动图像设置 静态启动图像 -
Scaling(缩放比例) 启动图像设置 - 1. Center:居中(仅缩小),图像太大时缩小,否则以原始大小绘制 2. Scale to fit(填充):缩放图像使较长尺寸适合屏幕,用黑色填充空白 3. Scale to fit(裁剪):缩放图像使较短尺寸适合屏幕,裁剪较长维度

3.OtherSettings-渲染

设置项 描述 可选值及说明
Color Space(色彩空间) 切换 Unity 中用于渲染的色彩空间 1. Gamma(伽马):纹理倾向于保存在此空间,但着色器采样时基于伽马值可能导致结果不准确 2. Linear(线性):效果相对较好,不是所有平台都支持。支持平台有 Android、iOS、WebGL、Windows、Mac OS X 、Linux。Android 至少需 OpenGL ES 3.0 图形 API 和 Android 4.3;iOS 需要 Metal 图形 API;WebGL 至少需 WebGL 2.0 图形 API。确定主流设备支持情况选择,不支持自动退出
Vulkan 一个跨平台的 2D 和 3D 绘图应用程序接口,是 OpenGL 的下一代版本,旨在提供更低的 CPU 开销与更直接的 GPU 控制 -
Auto Graphics API(自动图形接口) 控制图形 API 接口的使用方式 1. 勾选:Unity 自动尝试使用对应图形 API 接口,默认使用 Vulkan,不支持则退到 GLES3.2、GLES3.1 或 GLES3.0 2. 不勾选:可在列表中自行对使用的图形 API 接口进行排序,设置使用优先级。下方副选项 ES3.1、ES3.1+AEP、ES3.2 用于配置最低 OpenGL ES 3.X 次要版本(Require ES3.1: 要求使用 ES3.1;Require ES3.1 + AEP: 要求使用 ES3.1 + AEP;Require ES3.2: 要求使用 ES3.2)。只有当 GLES2 不在列表中时,Unity 才会将额外的三个选项要求添加到 Android 应用清单中,若发布到 Google Play 应用商店,不受支持设备不会显示该应用
Color Gamut(色域) 添加或删除 Android 平台用于渲染的色域,色域定义设备可显示的颜色范围 1. sRGB:默认且必需的色域,一般手机使用此色域即可 2. DisplayP3:当定位具有宽色域显示的设备(如 PC 主机游戏)时,可利用完整显示功能
Multithreaded Rendering(多线程渲染) 将图形 API 调用从 Unity 的主线程移动到单独的工作线程,提升主线程 CPU 使用率较高的应用程序性能 启用此选项可实现;不启用则不进行此操作
Static Batching(静态批处理) 将静态物体合并处理 DC,提升性能 启用可实现合并处理;不启用则不进行此操作
Dynamic Batching(动态批处理) 动态合并 DC 提高性能,可编程渲染管线(SPR)处于活动状态(启用 URP 或 HDRP)时不起作用,使用 FairyGUI 时需开启以优化 DC 启用可实现动态合并;不启用则不进行此操作,且在特定情况(启用 URP 或 HDRP)下无法使用
Compute Skinning(计算蒙皮) 启用 DX11/ES3 GPU 计算蒙皮,释放 CPU 资源,对图形接口版本要求较高(PC 上 DX11、移动设备 ES3) 启用可启用计算蒙皮;不启用则不进行此操作
Graphics Jobs (Experimental)(图形作业) 启用后将渲染循环的图形任务移到其它 CPU 内核上运行的工作线程,减少主线程时间 启用可实现任务转移;不启用则不进行此操作
Texture Compression Format(纹理压缩格式) 可在 ASTC、ETC2、ETC 之间选择纹理压缩格式 可选择 ASTC、ETC2、ETC 其中一种格式
Normal Map Encoding(法线地图编码) 选择 XYZ 或 DXT5nm 样式设置法线映射编码,影响法线贴图的编码方案和压缩格式 1. 选择 XYZ 样式 2. 选择 DXT5nm 样式:法线贴图质量更高,但在着色器中解码成本更高
Lightmap Encoding(光照贴图编码) 选择"正常质量"或"高质量"设置光照贴图编码,影响光照贴图的编码方案和压缩格式 1. 选择"正常质量" 2. 选择"高质量"
Lightmap Streaming(光照贴图流) 是否对光照贴图使用 Mipmap 流式处理 选择启用则使用;选择不启用则不使用
Streaming Priority(流优先级) 设置 Mipmap 流式处理系统中所有光照贴图的优先级,生成光照贴图时应用于所有光照贴图,正数表示更高优先级,范围为 --128 到 127 可设置具体数值(在 --128 到 127 之间的整数)
Frame Timing Stats(帧时序统计) 启用可收集 CPU 和 GPU 帧时间统计信息,需和摄像机上的动态分辨率设置(Camera 组件下的 Allow Dynamic Resolution 选项)结合使用,确定应用程序受 CPU 还是 GPU 限制 启用可收集统计信息;不启用则不收集
OpenGL: Profiler GPU Recorders 是否启用 OpenGL 的探查 GPU 记录器,在 OpenGL 上,探查 GPU 记录器会禁用 GPU 探查器 启用则开启记录器并禁用 GPU 探查器;不启用则不开启记录器
Virtual Texturing(虚拟纹理) 在场景有很多高分辨率纹理时减少 GPU 内存使用量和纹理加载时间,将纹理拆分为瓦片,按需上传到 GPU 内存,不兼容安卓设备 启用可实现虚拟纹理功能;不启用则不进行此操作,且因不兼容安卓设备,安卓平台无法使用
Shader Precision Model(着色器精度模型) 控制着色器中使用的采样器的默认精度 -
360 Stereo Capture(360 度立体捕捉) Unity 是否可以捕获立体 360 度全景图像和视频,不兼容 Android 启用则可进行捕捉操作;不启用则不进行此操作,且因不兼容 Android,安卓平台无法使用

4.OtherSettings-Vulkan设置和身份证明

设置项 分类 描述 可选值及说明
SRGB Write Mode(SRGB 写入模式) Vulkan设置 允许呈现器在运行时切换 sRGB 写入模式,可暂时关闭线性到 sRGB 写入颜色转换 1. 启用:可切换 sRGB 写入模式,但不建议移动设备启用,会增加 GPU 负担 2. 不启用:保持默认的 sRGB 写入模式
Number of swapchain buffers(交换链缓冲区数量) Vulkan设置 设置交换链缓冲区数量,与Vulkan渲染器配合使用,可解决移动平台延迟问题 1. 设为 2:双缓冲 2. 设为 3:三重缓冲,一般保持为 3,不建议安卓设备使用双缓冲,会产生负面影响
Acquire swapchain image late as possible(尽可能晚的获取交换链图像) Vulkan设置 启用后,Vulkan 延迟获取后缓冲器,直到将帧渲染为屏幕外图像,与双缓冲结合可提高性能,但额外的 blit 会占用带宽 1. 启用:延迟获取后缓冲器,可能提高性能但有带宽占用风险,不建议安卓设备修改 2. 不启用:按常规方式获取后缓冲器
Recycle command buffers(回收命令缓冲区) Vulkan设置 决定 Unity 执行命令缓冲区后是回收还是释放命令缓冲区 1. 回收:执行后回收命令缓冲区 2. 释放:执行后释放命令缓冲区
Apply display rotation during rendering(在渲染期间应用显示旋转) Vulkan设置 启用可在显示的本机方向上执行所有渲染,有性能优势但有使用限制 1. 启用:在本机方向渲染,有性能优势但有使用限制,不建议修改 2. 不启用:按常规方式渲染
Override Default Package Name(是否覆盖默认包名称) 身份证明 用于在公司名和游戏名不是英文时,自行设置包名 1. 勾选:可自行设置包名 2. 不勾选:使用默认包名
Package Name(软件包名) 身份证明 应用程序的 ID,用于在设备和安卓应用商店中唯一标识应用 格式为 com.公司名.产品名,只能包含字母数字和下划线,每段都必须以字母开头
Version(版本号) 身份证明 标识应用程序包的迭代 格式为数字.数字.数字......,如 1.0、4.3.2、1.2.1 等
Bundle Version Code(内部版本号) 身份证明 用于确定版本新旧,数字越大版本越新,不显示给用户 为整数,每次发布新版本可让数字加一
Minimum API Level(最低API级别) 身份证明 决定应用程序运行所需的最低 API 级别,SDK 版本低于该设置的设备无法安装应用 设置具体的 API 级别,如 Android 系统的 API 版本号
Target API Level(目标API级别) 身份证明 指定应用的目标 API 级别,通知 Android 系统已针对目标版本测试,应用也可在较低版本运行(取决于 Minimum API Level) 设置具体的 API 级别,如 Android 系统的 API 版本号

5.OtherSettings-配置(Configuration)

设置项 描述 可选值及说明
Scripting Backend(脚本后端) 决定Unity如何在项目中编译和执行C#代码 1. Mono:将C#编译为.Net公共中间语言CIL,并使用公共语言运行时执行中间语言 2. IL2CPP:将C#编译为CIL,再将CIL转换为C++,最后将C++编译为本机代码
Api Compatibility Level(API兼容性级别) 决定可以在项目中使用的.Net API,影响代码和第三方库的兼容性 1...Net Standard 2.1:和.Net Standard 2.1兼容,生成较小版本,具有完整跨平台支持 2...Net Framework:和.Net Framework兼容(包含.Net Standard 2.1所有内容),包含更多API支持,但生成包更大。使用C#高级功能报错时可尝试切换,有替代方案时建议用.Net Standard 2.1以减小包体
C++ Compiler Configuration(C++编译器配置) 只有将Scripting Backend设置为IL2CPP才能使用该选项 1. Debug(调试模式):关闭所有优化,代码生成速度快但运行慢,用于调试 2. Release(发布模式):对代码进行优化,编译后代码运行快、二进制文件小,但编译时间长 3. Master(大师模式):实现所有可能的优化,发布时间比发布模式长,发布最终版本时可使用
Use incremental GC(使用增量GC) 启用后可使用增量垃圾回收器,将GC分散到多个帧上执行,降低一帧中GC造成的卡顿 启用或不启用
Assembly Version Validation(程序集版本验证) Mono是否验证强名称程序集中的类型,强名称程序集为程序集创建唯一标识,防止程序集冲突 验证或不验证
Mute Other Audio Sources(将其它音频源静音) 希望在运行Unity应用程序时停止后台运行应用程序中的音频,可启用该选项,否则后台音频和Unity音频一起播放 启用或不启用
Target Architectures(目标体系结构) 允许应用程序运行的CPU,64位环境运行安卓应用有性能优势,64位应用可处理超4GB内存空间,Mono模式只能选ARMv7,IL2CPP模式可选更多 1. ARMv7:32位的ARM 2. ARM64:64位的ARM 3. x86(Chrome OS):32位 4. x86-64(Chrome OS):64位
Split APKs by target architecture(按目标架构拆分APK) 启用后,为目标体系结构中选择的每个CPU架构创建单独的APK,在Google Play中根据设备情况下载对应版本APK,可减小apk大小,但主要针对Google Play,国内产品几乎不使用 启用或不启用
Target Devices(目标设备) 指定允许运行APK的目标设备 1. All Devices(所有设备):允许apk在所有Android和Chrome OS设备上运行 2. Phones,Tablets,and TV Devices Only(手机、平板、电视设备):允许apk在Android手机、平板电脑、电视上运行,不能在Chrome OS设备上运行 3. Chrome OS Devices Only(Chrome OS设备):允许apk在Chrome OS设备上运行,不能在Android手机、平板、电视上运行
Install Location(安装位置) 指定设备上应用程序的安装位置 1. Automatic(自动):由操作系统决定,用户可移动安装位置 2. Prefer External(首选外部):先尝试安装到外部存储(SD卡),不行则安装到手机存储空间 3. Force Internal(强制内部):安装到手机存储空间,用户无法移动到外部存储安装
Internet Access(互联网接入) 选择是否始终将网络权限添加到Android清单(即使未使用任何网路API) 1. Auto:仅当使用网络API时添加互联网访问权限 2. Require:始终添加互联网访问权限
Write Permission(写入权限) 是否启用对外部存储(SD卡)的写入访问权限,并向Android应用清单添加相应权限 1. Internal(内部):仅授予对内部存储的写入权限 2. External(外置SD卡):启用对外部存储的写入权限
Filter Touches When Obscured(遮挡时过滤触摸) 启用后丢弃在另一个可见窗口覆盖Unity应用程序时收到的触摸(触屏事件),防止窃听劫持 启用或不启用
Sustained Performance Mode(持续性能模式) 启用此选项可在较长时间段内设置可预测且一致的设备性能级别,无需热限制,但整体性能可能降低 启用或不启用
Low Accuracy Location(低精度定位) 启用后改为低精度值与Android位置API配合使用 启用或不启用
Chrome OS Input Emulation(Chrome OS输入仿真) Chrome OS操作系统默认将鼠标和触摸板输入事件转为触屏输入事件,取消可禁用此默认行为 启用或不启用
Android TV Compatibility(安卓电视兼容性) 启用后应用程序标记为兼容Android TV 启用或不启用
Android Game(安卓游戏) 启用后将输出的apk标记为游戏而非常规应用 启用或不启用
Android Gamepad Support Level(安卓游戏输入板支持等级) 选择玩游戏时支持的输入方式 可根据需求选择相应等级
Warn about App Bundle size(警告应用程序包的大小) 只有在Build Settings中勾选了Build App Bundle(Google Play)才有用,应用程序包大小超过阈值时收到警告 可设置具体的阈值大小
Active Input Handling(活动输入处理) 选择处理来自用户输入的方式 1. Input Manager:老的输入系统,Input相关 2. Input System Package:新输入系统 3. Both:同时使用,在Unity进阶之InputSystem中有详细讲解

6.OtherSettings-ScriptCompilation

设置项 分类 描述 可选值及说明
Scripting Define Symbols(脚本定义符号) 脚本编译 设置自定义编译标志,使用第三方内容时可能在此添加脚本符号,Unity 有内置脚本符号,可配合多路测试 #if 使用,也可自定义 可添加自定义脚本符号,利用内置脚本符号(如 Lua 热更相关、FairyGUI 相关等),通过 #if#elif#else#endif 控制代码逻辑
Additional Compiler Arguments(其它编译器参数) 脚本编译 向此列表添加条目以将其他参数传递给 Roslyn 编译器 1. 按"+"按钮创建新条目添加参数 2. 按"-"按钮删除条目 3. 单击"应用"按钮在将来编译中包括其他参数 4. 单击"还原"按钮将列表重置为最近应用的状态
Suppress Common Warnings(禁止显示常见警告) 脚本编译 禁用此设置可显示 C# 警告 1. 启用:禁止显示常见 C# 警告,如 CS0169(从不使用私有字段)、CS0649(未初始化的私有或内部字段声明) 2. 禁用:显示 C# 警告
Allow 'unsafe' Code(允许使用"不安全"代码) 脚本编译 启用对在预定义程序集中编译"unsafe"C# 代码的支持 1. 启用:支持编译"unsafe"C# 代码,使用指针等操作需勾选此项 2. 不启用:不支持编译"unsafe"C# 代码
Use Deterministic Compilation(使用确定性编译) 脚本编译 启用此设置后,编译的程序集在每次编译时都是完全相同的,可用于确定二进制文件是否从受信任的源编译 1. 启用:使用确定性编译,编译的程序集每次相同 2. 禁用:防止使用 -确定性 C# 标志进行编译
Enable Roslyn Analyzers(启用罗斯林分析器) 脚本编译 禁用此设置可编译用户编写的脚本,而无需项目中可能存在的 Roslyn 分析器 DLL(Roslyn 是微软的.Net 开源编译器,提供丰富的代码分析 API) 1. 启用:使用 Roslyn 分析器分析脚本 2. 禁用:不使用 Roslyn 分析器,直接编译用户编写的脚本
unsafe 关键词(基本概念) C# 语言特性 默认 C# 不支持指针,unsafe 关键词用于表示不安全的上下文,在 C# 中进行指针相关操作必须使用该关键词,不安全代码在 CLR 中是指无法验证的代码,但不一定危险,使用时需确保无安全风险和指针错误 在 C# 中使用指针等操作需使用 unsafe 关键词,代码在 CLR 中无法验证安全性,仅在完全信任的程序集中执行不安全代码
unsafe 关键词(基本使用) C# 语言特性 在 Unity 中正常使用 unsafe 关键词编写程序,需在 Unity 的 Player Settings 中的 Other Settings 中将 Allow 'unsafe' Code 选项勾选上,可用于修饰函数、代码块、成员变量、类 1. 勾选 Allow 'unsafe' Code 选项后可使用 unsafe 关键词 2. 可修饰函数、代码块、成员变量、类
unsafe 关键词(总结) C# 语言特性 unsafe 的使用能让在 C# 中使用指针,但存在安全风险和稳定性风险,无特殊需求尽量避免使用 尽量避免在 C# 中使用 unsafe 关键词,以减少安全和稳定性风险

7.OtherSettings-优化和堆栈跟踪

设置项 分类 描述 可选值及说明
Prebake Collision Meshes(预烘焙碰撞到网格) 优化 在构建时将碰撞数据添加到网格 启用:在构建时添加碰撞数据到网格 不启用:不进行此操作
Keep Loaded Shaders Alive(保持加载的着色器的活动状态) 优化 启动后,着色器不能卸载,避免卸载后重复加载造成性能开销和卡顿 启用:不能卸载着色器 不启用:可以卸载着色器
Preloaded Assets(预装资源) 优化 设置启动时加载的资源数组,将想要预加载的内容拖入框中 可将需要预加载的资源拖入设置框中
Strip Engine Code(剥离引擎代码) 优化 选择IL2CPP模式才会出现的字段,启用可删除Unity引擎功能中没有使用的代码,减小包体大小 启用:删除未使用的引擎代码,减小包体 不启用:不进行代码剥离
Managed Stripping Level(管理剥离水平) 优化 选择Unity如何剥离未使用的C#代码,发布时自动去除未使用代码,可能意外删除需要的代码 1. Disabled:不剥离,只有在Mono模式下才能选择 2. Minimal:最小剥离,Unity 只会搜索Unity引擎未使用的.Net类库,不删除用户编写代码,IL2CPP模式下默认 3. Low:低级剥离,处理Unity相关,玩家自己编写的代码也会被剥离,尽量减小意外剥离 4. Medium:中级剥离,比Low更多一些剥离 5. High:高级剥离,优先考虑打包大小,最大限度剥离代码,可配合link.xml手动拒绝剥离,或使用[Preserve]特性(在不希望被剥离的函数前加该特性)
Enable Internal Profiler(启用内部探查器) 优化 已弃用的功能,用于从Android SDK的设备中获取profiler数据adblogcat测试项目时输出,仅在开发版本中可用 该功能已弃用
Vertex Compression(顶点压缩) 优化 选择要设置的通道,以便在顶点压缩方法下压缩网格,减少内存中网格数据的大小,提高CPU性能 选择相应的通道进行顶点压缩设置
Optimize Mesh Data(优化网格数据) 优化 启用后,构建时会从使用的网格中剥离未使用的顶点属性,减少网格数量,减小包体大小,减小加载时间和运行时内存使用,但运行时不能更改材质或着色器相关设置 启用:构建时剥离未使用的顶点属性 不启用:不进行此操作,运行时可自由更改材质或着色器设置
Texture MipMap Stripping(贴图纹理剥离) 优化 启用后会启用纹理贴图剥离,在构建时会从纹理中剥离没有使用的纹理贴图,根据发布平台的质量设置确定哪些贴图用不到,mipmap生成的多分辨率图也会被剥离 启用:进行纹理贴图剥离 不启用:不进行此操作
StackTrace(堆栈跟踪) 优化 选择在特定的上下文中允许的日志记录类型和日志记录的方式 日志记录类型: 1. Error:错误信息 2. Assert:断言(用于检测非法情况的)信息 3. Warning:警告信息 4. Log:打印日志信息 5. Exception:异常信息 日志记录方式: 1. None:不记录 2. ScriptOnly:只在运行脚本时记录信息 3. Full:一直记录
Clamp BlendShapes(Deprecated)(钳制混合形状权重的范围) 优化 启用骨骼蒙皮动画中钳制混合形状权重的范围,已弃用 该功能已弃用

8.PublishingSettings-KeystoreManager

设置项 分类 描述 可选值及说明
Android 中的签名 发布设置准备知识 Android 要求所有已安装应用程序使用数字证书做数字签名,数字证书私钥由开发者持有,用于标示应用程序作者并建立信任关系,证书可自制,未正确签名应用无法安装或运行 数字证书私钥由开发者持有,可使用自制签名证书,无正确签名应用在 Android 系统(模拟器或真实设备)无法安装运行
Android 应用程序清单(AndroidManifest.xml) 发布设置准备知识 Android 应用程序工程中的 xml 文件,用于声明应用程序组件,确定用户权限、最低 API 级别,声明硬件和软件特性等,引入 Android 第三方 SDK 或与 Android 交互时需编辑,无需求可忽略 声明应用程序组件、确定用户权限(如网络、通讯录、信息读取等)、声明最低 API 级别、声明硬件和软件特性(如摄像头、蓝牙、多点触碰等)
Gradle 发布设置准备知识 一个自动化构建开源工具,基于 JVM,主要面向 Java 应用,也支持其他语言,可用于 Android 项目构建,使项目更简洁,在 Unity 中用于打包安卓应用程序,Android Studio 也使用它打包 基于 JVM 的自动化构建工具,用于 Android 项目构建,帮助打包安卓应用程序
ProGuard 发布设置准备知识 一个压缩、优化和混淆 Java 字节码文件的免费工具,可删除无用内容、优化字节码、重命名类等,常用于 Android 开发混淆项目,增加反编译难度,Unity 发布安卓应用默认使用 压缩、优化和混淆 Java 字节码文件,删除无用类、字段、方法和属性,删除注释,重命名类、字段等
R8 发布设置准备知识 相对 ProGuard 较新的 Android 混淆编译器,可减小应用大小,Android Gradle 3.4.0 或更高版本构建项目不再使用 ProGuard 优化,Android Sutdio 3.3 版本开始用它做代码压缩器,比 ProGuard 缩减代码更快、输出大小更优,Unity 发布安卓应用可选择使用 较新的 Android 混淆编译器,减小应用大小,在特定版本 Android 构建项目中替代 ProGuard,缩减代码更快、输出更优
密钥管理器 发布设置 可通过密钥管理器创建、配置和加载密钥和密钥库,可在 Keystore Manager 窗口或 Publishing Settings 发布设置中加载现有密钥库和密钥 -
下拉菜单(密钥管理器) 发布设置 在该下拉菜单选择创建新的密钥库或加载现有的密钥库 1. Create New:创建新的密钥库 - Anywhere:打开项目文件夹根目录下的文件资源管理器,是 Unity 存储密钥库的默认位置 - In Dedicated Location:将密钥库文件保存到计算机中的另一个目录中,为协同开发方便,建议保存在项目文件夹下 2. Select Existing:选择现有密钥库,可指定加载现有密钥库
Password(密钥库的密码) 发布设置 密钥库的密码 设置密钥库密码
Confirm password(创建密钥库时需要重复一次密码) 发布设置 创建密钥库时重复输入密码以确认 重复输入密码与 Password 一致
Existing Keys(现有密钥) 发布设置 界面中包含当前密钥库包含的密钥的只读列表 显示当前密钥库中密钥的只读信息
New Key Values(新键值) 发布设置 可在此处在密钥库中添加密钥 1. Alias:密钥的标识名字,一般分不同厂商,如 huawei、xiaomi 2. Password:密钥的密码 3. Confirm password:密钥的确认密码,必须和密码相同 4. Validity(years):有效期(年),默认有效期为 50 年,一般设置较大值,可理解为管理应用程序的有效时间 5. First and Last Name:名字和姓氏 6. Organizational Unit:所在企业中的部门 7. Organization:组织,管理应用程序的组织,一般为公司名 8. City Or Locality:个人所在的城市或地区 9. State or Province:个人所在的州或省 10. Country Code(XX):个人的国家代码,中国的国家代码为 86

9.PublishingSettings-其他

项目密钥库

项目密钥库是用来保存签名密钥,以保障应用程序安全性的容器。若要加载并使用现有的密钥库,需进行以下操作:

  1. 启动 Custom Keystore。
  2. 在 Select 下拉列表里选 Browse,从文件系统挑选密钥库。
  3. 输入密钥库密码。

相关设置说明

设置项 描述
Custom Keystore 启用后,能够指定加载和使用现有的密钥库
Select 启用 Custom Keystore 后,可通过此按钮选择要使用的密钥库
Path 显示所选密钥库所在的路径
Password 输入用于加载所选密钥库的密码
Project Key 加载密钥库后,Unity 会加载库中的全部密钥。可在此设置从该密钥库中选择哪一个密钥作为项目的活动密钥
Alias 选择用于打开项目的密钥
Password(项目密钥密码) 输入所选密钥的密码

构建相关

默认情况下,Unity 采用安装时提供的清单文件、Gradle 模板和文件来构建应用程序。若要进行自定义,需启用 Build 下方的复选框,此时文件会出现在复选框下方,接着打开新文件进行修改,保存修改后的文件,Unity 下次构建应用程序时就会自动使用这些文件。

设置项 描述
Custom Main Manifest 这是一个 xml 文件,可在此决定权限设置,还能设置是否启用某些安卓功能等
Custom Launcher Manifest 同样是 xml 文件,可在此决定应用程序启动前的外观和行为
Custom Main Gradle Template Gradle 是一个构建系统,能自动执行许多构建过程并避免常见的构建错误,Unity 对所有 Android 版本都使用 Gradle
Custom Launcher Gradle Template 这是一个 gradle 文件,包含了构建 Android 应用程序的相关说明
Custom Base Gradle Template 是一个 gradle 文件,包含了所有其他模板和 Gradle 项目间的共享配置
Custom Gradle Properties Template 属于属性文件,包含了 Gradle 生成环境的配置设置
Custom Proguard File 是一个 txt 文件,包含了缩小过程的配置设置

代码混淆和缩小相关

Minify 是对应用程序代码进行缩减、混淆和优化的过程,能减小代码大小并增加反编译难度。使用 Minify 设置可确定 Unity 何时以及如何将缩小应用于构建。不过使用该功能会延长发布时间,还会使调试变得复杂,所以通常在最终发布时才使用,平时发布测试应用时无需开启。

设置项 描述
Use R8 默认情况下,Unity 使用 Proguard 进行缩小。启用此复选框可改用 R8
Release 若希望 Unity 在发布构建时缩小应用程序的代码,需启用此复选框
Debug 若希望 Unity 在调试构建时缩小应用程序的代码,需启用此复选框

拆分应用程序二进制文件

启用 Split Application Binary 选项,可将输出包拆分为主包 (APK) 和扩展包 (OBB) 包。若要发布大于 100 MB 的应用程序,Google Play 应用商店要求使用此功能。

三、交互项目创建

1.Unity调用安卓

操作类型 方法调用格式 描述
成员变量获取 androidJavaObject.Get<变量类型>("变量名") 用于获取 Android Java 对象的成员变量
成员变量赋值 androidJavaObject.Set<变量类型>("变量名", 值) 用于给 Android Java 对象的成员变量赋值
静态变量获取 androidJavaObject.GetStatic<变量类型>("变量名") 用于获取 Android Java 对象的静态变量
静态变量赋值 androidJavaObject.SetStatic<变量类型>("变量名", 值) 用于给 Android Java 对象的静态变量赋值
无返回值成员函数调用 androidJavaObject.Call("函数名", 参数) 调用 Android Java 对象的无返回值成员函数
有返回值成员函数调用 androidJavaObject.Call<返回值类型>("函数名", 参数) 调用 Android Java 对象的有返回值成员函数
无返回值静态函数调用 androidJavaObject.CallStatic("函数名", 参数) 调用 Android Java 对象的无返回值静态函数
有返回值静态函数调用 androidJavaObject.CallStatic<返回值类型>("函数名", 参数) 调用 Android Java 对象的有返回值静态函数

代码示例

csharp 复制代码
        androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");

        btnOpenAndroidActivity.onClick.AddListener((() =>
        {
            androidJavaObject.Call("OpenActivity");
        }));

2.安卓调用Unity

Android调用Unity规则

  • 需要写在继承MonoBehaviour的脚本中。
  • 需要挂载在场景中处于激活状态的GameObject上。
  • 交互时,在Android端调用API:

调用方法UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
注意:该API中的参数只能是String类型或者为null

3.Android开发的必备原理

(1)Android应用程序的基本构成
Android SDK :为开发Android应用程序提供了各种各样的API和工具,是进行Android开发的基础支撑,它包含了丰富的开发资源。
编程语言 :主要使用Java或者Kotlin语言进行开发,这两种语言都提供了大量丰富的库和API,开发者可以利用这些来实现应用的各种功能。
XML配置文件:在Android应用程序中,XML用于定义UI布局、样式以及资源信息等。它承担着界面和资源相关的配置工作,使得开发者能够设计出不同的用户界面。

  • 应用程序组件 :Android应用程序由以下四种组件组成:
    • Activity(活动):主要用于实现用户界面,代表着一个屏幕或窗口,其中包含了各种UI组件,如按钮、文本、输入框等,是用户与应用进行交互的主要界面载体。
    • Service(服务):是一种可以在后台执行长时间运行操作的组件,没有用户界面,通常用于处理和交互无关的逻辑,例如上传、下载、音乐播放等后台任务。
    • Broadcast Receiver(广播接收器):主要负责接收系统或者其他应用程序发出的广播消息。这些消息可以来自系统事件,比如网络连接变化、设备启动等,也可以来自其它应用程序。
    • Content Provider(内容提供程序):用于管理应用程序数据,既可以让其它应用程序或系统访问本应用中的数据,也能让本应用访问其它应用或系统的数据,例如用于存储应用程序的图片、音频、视频等数据。

在开发Android应用程序时,主要是编写基于这四种组件的逻辑。日常开发中,更多的是利用Android SDK中的API开发Activity活动组件,类似于游戏中UI界面逻辑开发。只有在有其他后台或者拓展功能需求时,才会使用其它三种组件。

(2)AndroidManifest.xml文件的作用

AndroidManifest.xml是Android应用程序的应用清单文件,每个应用程序都必须包含一个,并且文件名必须是AndroidManifest.xml。该文件中包含了应用程序的配置信息,Android系统会根据这些配置来运行应用程序。

以下是该文件中包含的重要信息:
应用程序组件信息 :包含应用程序的四大组件(Activity、Service、Broadcast Receiver、Content Provider)的相关内容。
应用程序权限 :如存储权限、互联网访问权限等等,通过这些权限声明,应用才能在系统中获得相应的操作许可。
应用程序元数据 :包括程序名称、版本号、图标、包名等等,这些信息用于标识和描述应用程序。
应用程序启动信息:指定默认启动哪一个Activity,决定了应用启动时呈现给用户的第一个界面。

(3)常用标签作用
manifest标签 :作为文件的根标签,主要包含包名、版本号等信息,是整个应用配置的基础。
uses-permission标签 :用于声明应用程序所需的权限,例如存储权限、网络访问权限等,明确应用在系统中可以执行的操作。
application标签 :应用程序的各组件都包含在其中,并且还可以配置一些图标、文本、样式等信息,是应用组件的容器。
activity标签 :用于描述Activity组件的具体信息,包括其属性和相关配置。
meta-data标签 :为Activity提供元数据,这些数据可以通过API获取,为Activity添加额外的信息。
intent-filter标签:为组件声明意图(intent),其中包含action(意图类型)和category(意图类别)两个子标签,用于定义组件的意图匹配规则,决定组件在何种情况下被激活。

4.交互项目创建

  1. Unity项目:创建项目后切换到Android平台,设置包名和Android版本。

  2. Android Studio项目:选择Phone and Tablet,创建Empty Activity项目。确保包名和Minimum SDK版本与Unity项目一致,若版本缺失,在Android Studio中下载。创建完成后,删除工程里两个Test项目和res下的无用资源。

  3. build.gradle文件 :在Android Studio的Project页签切换到Project视图,展开app页签,打开build.gradle文件。将 id 'com.android.application' 改为 id 'com.android.library',删除 defaultConfig 中的 applicationId 项,点击右上角"Sync Now"同步。

  4. 导入classes.jar包 :从 Unity安装目录\Data\PlaybackEngines\AndroidPlayer\Variations\mono(il2cpp)\Release\Classes 路径拷贝包到Android Studio的 app\libs 下,选中包右键点击"Add As Library"。

  5. 导入UnityPlayerActivity脚本 :将 Unity安装目录/Data/PlaybackEngines/AndroidPlayer/Source/... 路径下的文件夹拷贝到Android Studio的 app/src/main/java 中。

  6. 修改MainActivity脚本 :让其继承 UnityPlayerActivity,注释 onCreate 函数里的 setContentView 代码。

  7. 修改AndroidManifest.xml配置文件 :删除 application 中的无用内容,在 activity 里添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>

8.选中 MainActivity 脚本,通过工具栏"Build" -> "Make Moudle ..." 生成Unity用的aar包。若打包时出现下载提示,等待下载完成即可构建成功。

9.将生成的aar包导入Unity。

相关推荐
Yuze_Neko2 小时前
【Unity】合批处理和GPU实例化的底层优化原理(完)
unity·游戏引擎
Clank的游戏栈11 小时前
Unity开放世界实时GI分块烘焙策略技术详解
unity·游戏引擎
tobybo11 小时前
[unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用
unity·游戏引擎
咩咩觉主14 小时前
Unity 实现一个简易可拓展性的对话系统
unity·c#·游戏引擎·程序框架
托塔119 小时前
C#设计模式快速回顾
unity·设计模式·游戏引擎
两水先木示1 天前
【Unity3D】摄像机适配场景以及Canvas适配
unity·适配
WarPigs1 天前
Blender导出fbx到Unity找不到贴图的问题
unity·blender·贴图
虾球xz1 天前
游戏引擎学习第175天
java·学习·游戏引擎
Front_Yue1 天前
Unity中MonoBehaviour的生命周期详解
3d·unity·c#