7.1 PC (Windows, Mac, Linux) 7. 平台发布父章节:7.1 PC (Windows, Mac, Linux) 7.1.1 PC 平台发布的准备工作 在开始 PC 平台发布之前,充分的准备工作至关重要。这不仅能提高发布效率,还能确保最终产品的质量和用户体验。 7.1.1.1 项目设置与优化 项目结构审查: 确保项目结构清晰合理,资源组织有序。这有助于后期维护和更新,也方便团队协作。 资源优化: 纹理压缩: 使用适当的纹理压缩格式(如 DXT, ETC, ASTC)减小纹理大小,降低内存占用和加载时间。根据平台特性选择最佳压缩格式。 模型优化: 减少模型面数,优化网格结构,使用 LOD 技术(Level of Detail)在不同距离展示不同精度的模型。
7. 平台发布父章节:7.1 PC (Windows, Mac, Linux)
7.1.1 PC 平台发布的准备工作
在开始 PC 平台发布之前,充分的准备工作至关重要。这不仅能提高发布效率,还能确保最终产品的质量和用户体验。
7.1.1.1 项目设置与优化
项目结构审查: 确保项目结构清晰合理,资源组织有序。这有助于后期维护和更新,也方便团队协作。
资源优化:
纹理压缩: 使用适当的纹理压缩格式(如 DXT, ETC, ASTC)减小纹理大小,降低内存占用和加载时间。根据平台特性选择最佳压缩格式。
模型优化: 减少模型面数,优化网格结构,使用 LOD 技术(Level of Detail)在不同距离展示不同精度的模型。
音频压缩: 使用合适的音频压缩格式(如 Vorbis, MP3)减小音频文件大小,同时保证音质。
代码优化: 编写高效的代码,避免不必要的计算和资源消耗。使用对象池、协程等技术优化性能。
性能测试: 在 Unity 编辑器和目标 PC 平台上进行性能测试,使用 Unity Profiler 分析性能瓶颈,并进行针对性优化。重点关注 CPU 占用、GPU 占用、内存使用和帧率表现。
分辨率适配: 考虑不同 PC 显示器的分辨率,确保 UI 元素和游戏内容在各种分辨率下都能正确显示。使用 Canvas Scaler 组件和锚点、布局组等 UI 工具进行适配。
输入系统配置: PC 平台通常使用键盘、鼠标和手柄进行输入。Unity 提供了 Input Manager 和新的 Input System 两种输入管理方案。
Input Manager (旧系统): 配置 Input Manager 中的轴(Axes)和按钮(Buttons)来映射键盘、鼠标和手柄输入。代码中使用 Input.GetAxis 和 Input.GetButton 等 API 获取输入。
Input System (新系统): 功能更强大、更灵活的输入系统。通过 Input Actions 定义输入行为,支持设备绑定、输入处理和状态管理。推荐使用新的 Input System,尤其对于复杂的输入需求。
7.1.1.2 平台目标选择
在 Unity Build Settings 中,需要明确选择目标平台。
Windows: 选择 "PC, Mac & Linux Standalone",Target Platform 选择 "Windows"。
Architecture: 根据目标用户的硬件情况选择 "x86" (32位) 或 "x86_64" (64位)。通常建议选择 "x86_64" 以获得更好的性能和内存支持。
Target Windows Family: 选择目标 Windows 版本,通常选择 "Windows" 即可兼容大部分 Windows 系统。
Mac: 选择 "PC, Mac & Linux Standalone",Target Platform 选择 "macOS"。
Architecture: 选择 "x86_64" (Intel) 或 "Universal" (Intel 和 Apple Silicon)。如果需要支持最新的 Apple Silicon Mac,则选择 "Universal"。
OSX Target Family: 选择目标 macOS 版本,通常选择 "macOS" 即可。
Linux: 选择 "PC, Mac & Linux Standalone",Target Platform 选择 "Linux"。
Architecture: 选择 "x86" (32位)、 "x86_64" (64位) 或 "Universal" (支持多种架构)。根据目标 Linux 发行版和用户硬件选择合适的架构。
Distribution: 选择目标 Linux 发行版,通常选择 "Universal" 以兼容多种发行版。
7.1.2 PC 平台发布的代码实践
在 Unity 项目中,针对 PC 平台发布,有一些特定的代码实践需要注意。
7.1.2.1 平台条件编译
Unity 允许使用条件编译指令,根据不同的平台执行不同的代码。这对于处理平台差异性非常有用。
#if UNITY_STANDALONE_WIN // Windows 平台特定代码 Debug.Log("Running on Windows"); #elif UNITY_STANDALONE_OSX // macOS 平台特定代码 Debug.Log("Running on macOS"); #elif UNITY_STANDALONE_LINUX // Linux 平台特定代码 Debug.Log("Running on Linux"); #else // 其他平台或编辑器环境 Debug.Log("Running on other platform or in Editor"); #endif
7.1.2.2 文件路径处理
不同平台的文件路径分隔符不同。Windows 使用反斜杠 \,macOS 和 Linux 使用正斜杠 /。Unity 提供了 Path.Combine 和 Application.dataPath 等 API 来处理跨平台文件路径。
using System.IO; using UnityEngine; public class FilePathExample : MonoBehaviour { void Start() { string dataPath = Application.dataPath; // 项目的 Data 文件夹路径 string filePath = Path.Combine(dataPath, "Resources", "MyData.txt"); // 构建跨平台文件路径 Debug.Log("Data Path: " + dataPath); Debug.Log("File Path: " + filePath); // 读取文件示例 if (File.Exists(filePath)) { string[] lines = File.ReadAllLines(filePath); foreach (string line in lines) { Debug.Log("Line: " + line); } } else { Debug.LogError("File not found: " + filePath); } } }
7.1.2.3 系统调用与平台 API
有时需要调用操作系统提供的 API 或执行系统命令。Unity 提供了 System.Diagnostics.Process 类来执行系统命令。对于更底层的平台 API 调用,可以使用插件(Plugins)机制,编写 C/C++ 或 Native 代码,并在 Unity 中调用。
示例:打开默认浏览器并访问网页 (跨平台)
using System.Diagnostics; using UnityEngine; public class OpenBrowserExample : MonoBehaviour { public void OpenURL(string url) { #if UNITY_STANDALONE_WIN Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true }); #elif UNITY_STANDALONE_OSX Process.Start("open", url); #elif UNITY_STANDALONE_LINUX Process.Start("xdg-open", url); // 或 "gnome-open", "kde-open" 等,取决于 Linux 发行版 #else Debug.LogWarning("Platform not supported for opening browser automatically."); #endif } public void OpenUnityWebsite() { OpenURL("https://unity.com/"); } }
7.1.3 PC 平台发布的内容详解
本节将深入讲解 PC 平台发布过程中的关键内容和设置。
7.1.3.1 Build Settings 详解
Scenes in Build: 列表中包含的项目将被打包到最终的可执行文件中。确保包含所有必要的场景,并按照正确的加载顺序排列。可以使用拖拽或 "+" 按钮添加场景。
Platform: 选择目标平台,本章节重点是 "PC, Mac & Linux Standalone"。
Target Platform: 在 "PC, Mac & Linux Standalone" 平台下,进一步选择具体的操作系统:Windows, macOS, Linux。
Architecture (架构): 选择目标平台的处理器架构 (x86, x86_64, ARM64, Universal)。
Build Options (构建选项):
Development Build: 勾选后生成开发版本,包含调试符号和 Profiler 支持,用于测试和调试。发布正式版本时取消勾选。
Script Debugging: 允许在运行时附加调试器到脚本代码。开发版本常用,正式版本通常禁用。
Deep Profiling: 更详细的 Profiler 信息,性能开销较大,仅在需要深度性能分析时使用。
Autoconnect Profiler: 构建后自动连接 Profiler。
Allow 'unsafe' Code: 允许项目中使用 unsafe 代码,通常不建议勾选,除非项目确实需要。
Stripping Level (代码剥离级别): 用于减小构建体积。
Disabled: 不进行代码剥离。
Minimal: 剥离未使用的代码,但保留大部分功能。
Medium: 更积极地剥离代码,可能会移除一些反射和元数据,需要仔细测试。
Aggressive: 最激进的代码剥离,体积最小,但兼容性风险最高,通常不建议使用。
Compression Method (压缩方法): 选择资源压缩方法,减小构建体积。
LZ4: 速度快,压缩比适中。
LZ4HC: 压缩比高,速度稍慢。
Gzip: 压缩比最高,速度最慢,解压速度也较慢。
Brotli: 一种较新的压缩算法,压缩比和速度都优于 Gzip,但支持性可能稍差。
7.1.3.2 Player Settings 详解
Player Settings 包含了大量的项目配置选项,对最终产品的外观、行为和性能有重要影响。
Company Name & Product Name: 设置公司名称和产品名称,会显示在应用程序信息、安装目录等位置。
Version: 设置应用程序版本号,遵循版本控制规范。
Default Icon: 设置应用程序图标。需要为不同平台和分辨率提供合适的图标。Unity Editor 可以自动生成不同尺寸的图标。
Splash Image: 设置启动画面。可以自定义启动画面,提升品牌形象。
Resolution and Presentation:
Default Screen Width & Height: 设置默认分辨率。
Run in Background: 允许应用程序在后台运行时继续运行。
Default is Full Screen: 设置启动时是否全屏。
Allowed Screen Orientations: 设置允许的屏幕方向 (Portrait, Landscape, Auto Rotation)。PC 平台通常选择 Landscape 或 Auto Rotation。
Resizable Window: 允许用户调整窗口大小。
Visible Window Border: 显示窗口边框。
GraphicsUnit: UI 缩放单位 (Pixels, Points)。
Use DPI Scaling: 根据屏幕 DPI 自动缩放 UI。
Supported Aspect Ratios: 限制支持的屏幕宽高比。
Other Settings:
Rendering:
Graphics APIs: 选择图形 API (Direct3D11, Direct3D12, OpenGLCore, Vulkan, Metal)。Unity 会根据平台和硬件自动选择最佳 API。可以手动添加或移除 API。
Color Space: 选择颜色空间 (Gamma, Linear)。Linear Color Space 通常用于更真实的渲染效果,但性能开销稍高。
Rendering Path: 选择渲染路径 (Forward, Deferred, Legacy Deferred)。Forward Rendering 适合移动平台和简单场景,Deferred Rendering 适合复杂场景和大量光源。
Graphics Jobs: 启用图形作业,将渲染任务分配到多个线程,提高多核 CPU 利用率。
SRP Batcher: 脚本渲染管线批处理,优化渲染性能。
Static Batching & Dynamic Batching: 静态批处理和动态批处理,减少 Draw Call。
GPU Skinning: GPU 蒙皮,将蒙皮计算移至 GPU,减轻 CPU 负担。
Instancing: GPU 实例化,高效渲染大量相同模型。
Scripting:
Scripting Backend: 选择脚本后端 (Mono, IL2CPP)。
Mono: 跨平台性好,编译速度快,但性能相对较低。
IL2CPP: 将 C# 代码转换为 C++ 代码,编译成本地代码,性能更高,但编译时间较长。PC 平台通常建议使用 IL2CPP 以获得最佳性能。
API Compatibility Level: 选择 API 兼容级别 (.NET Standard 2.1, .NET Framework 4.x)。通常选择 .NET Standard 2.1 以获得更好的跨平台兼容性和功能支持。
Managed Stripping Level: 托管代码剥离级别,与 Build Settings 中的 Stripping Level 类似,但作用于托管代码。
Publishing Settings:
Keystore Manager (Android & WebGL): Android 和 WebGL 平台的密钥库管理。PC 平台通常不需要设置。
Texture Compression (Override for Windows/Mac/Linux): 可以为 PC 平台单独设置纹理压缩格式。
Icon (Override for Windows/Mac/Linux): 可以为 PC 平台单独设置图标。
Splash Image (Override for Windows/Mac/Linux): 可以为 PC 平台单独设置启动画面。
7.1.3.3 发布流程与分发
构建 (Build):
在 Build Settings 中选择目标平台和配置。
点击 "Build" 或 "Build And Run" 按钮。
选择构建输出目录。
Unity 将根据配置生成可执行文件和相关资源。
发布与分发:
Windows: 生成 .exe 可执行文件和包含资源文件的文件夹。
安装包制作: 可以使用 Inno Setup, NSIS 等工具制作 Windows 安装包 (.exe 或 .msi)。
分发平台: Steam, Epic Games Store, GOG, Itch.io, 独立网站等。
macOS: 生成 .app 应用程序包。
DMG 镜像制作: 通常将 .app 文件打包成 DMG 镜像文件 (.dmg) 方便分发。
签名与公证 (macOS Catalina 及更高版本): 为了安全性和用户信任,建议对 macOS 应用程序进行签名 (Code Signing) 和公证 (Notarization)。需要 Apple Developer Program 账号。
分发平台: Mac App Store, Steam, Epic Games Store, GOG, Itch.io, 独立网站等。
Linux: 生成可执行文件和包含资源文件的文件夹。
打包格式: 可以选择不同的 Linux 包格式,如 .tar.gz, .deb (Debian/Ubuntu), .rpm (Red Hat/CentOS/Fedora), AppImage, Snap, Flatpak。
可执行权限: 确保 Linux 可执行文件具有可执行权限 (chmod +x your_executable).
分发平台: Steam, Itch.io, Flathub, Snap Store, 独立网站等。
Mermaid 图表:PC 平台发布流程
7.1.4 测试与调试
PC 平台发布后,充分的测试和调试至关重要,确保游戏或应用程序在不同 PC 配置和操作系统版本上都能稳定运行。
多配置测试: 在不同配置的 PC 上进行测试,包括不同 CPU, GPU, 内存, 操作系统版本, 显卡驱动版本等。
兼容性测试: 测试在不同 Windows 版本 (Windows 7, 8, 10, 11), macOS 版本, Linux 发行版上的兼容性。
性能测试: 发布后的版本进行性能测试,确保帧率稳定,资源占用合理。
Bug 修复: 收集用户反馈和测试报告,及时修复 Bug。
更新迭代: 根据用户反馈和市场需求,持续更新迭代产品。
7.1.5 总结与最佳实践
PC 平台发布涉及多个环节,从项目准备、配置、构建到分发和测试,每个环节都至关重要。以下是一些最佳实践:
早期规划: 在项目初期就考虑 PC 平台发布,进行合理的项目结构设计和资源优化。
版本控制: 使用版本控制系统 (如 Git) 管理项目代码和资源,方便团队协作和版本回溯。
自动化构建: 使用 Unity Cloud Build 或 Jenkins 等工具实现自动化构建,提高构建效率和一致性。
持续集成/持续交付 (CI/CD): 建立 CI/CD 流程,自动化测试、构建和发布流程,加快迭代速度。
用户反馈: 重视用户反馈,及时收集和处理用户反馈,不断改进产品质量和用户体验。
平台特性利用: 了解各 PC 平台的特性,例如 Windows 的 DirectX, macOS 的 Metal, Linux 的 OpenGL/Vulkan,并合理利用平台特性优化性能和功能。
代码规范与可维护性: 编写规范、清晰、易于维护的代码,方便后期维护和扩展。
通过遵循以上指南和最佳实践,开发者可以更加高效、高质量地完成 Unity3D 项目在 PC 平台 (Windows, Mac, Linux) 的发布,为用户提供卓越的体验。