七、平台发布


文档摘要

七、平台发布 七、平台发布:将您的 Unity 项目推向世界 7.1 理解平台发布的重要性 平台发布不仅仅是将项目简单地打包上传到应用商店或网站,它是一个系统性的工程,涉及到诸多关键环节: 目标平台适配性: 不同的平台(如移动设备、PC、Web、主机、VR/AR)拥有不同的硬件配置、操作系统和用户交互方式。平台发布的首要任务是确保项目在目标平台上能够流畅运行,并充分利用平台特性。 性能优化: 平台发布前的性能优化至关重要。需要针对目标平台进行细致的性能分析和优化,确保项目运行流畅,避免卡顿、发热等问题,提升用户体验。 用户体验优化: 平台发布不仅仅是技术层面的工作,也需要关注用户体验。例如,针对移动平台,需要考虑触控操作的优化、应用启动速度、安装包大小等;

七、平台发布

七、平台发布:将您的 Unity 项目推向世界

7.1 理解平台发布的重要性

平台发布不仅仅是将项目简单地打包上传到应用商店或网站,它是一个系统性的工程,涉及到诸多关键环节:

  • 目标平台适配性: 不同的平台(如移动设备、PC、Web、主机、VR/AR)拥有不同的硬件配置、操作系统和用户交互方式。平台发布的首要任务是确保项目在目标平台上能够流畅运行,并充分利用平台特性。

  • 性能优化: 平台发布前的性能优化至关重要。需要针对目标平台进行细致的性能分析和优化,确保项目运行流畅,避免卡顿、发热等问题,提升用户体验。

  • 用户体验优化: 平台发布不仅仅是技术层面的工作,也需要关注用户体验。例如,针对移动平台,需要考虑触控操作的优化、应用启动速度、安装包大小等;针对 Web 平台,需要考虑加载速度、浏览器兼容性等。

  • 发布流程规范化: 规范化的发布流程可以提高效率,减少错误,确保版本管理清晰,方便后续的更新和维护。

  • 商业化准备: 如果项目有商业化需求,平台发布阶段还需要进行支付系统集成、广告 SDK 集成、应用商店配置等准备工作。

总之,平台发布是项目成功的关键一步,需要开发者认真对待,精心准备。

7.2 平台选择与目标设定

在开始平台发布之前,首先要明确您的项目目标平台。Unity3D 强大的跨平台特性使其支持众多平台,常见的平台包括:

  • 移动平台:

    • Android: 覆盖广泛的用户群体,但设备碎片化严重,需要做好适配。

    • iOS: 用户付费意愿高,但审核较为严格,需要遵循 Apple 的规范。

  • 桌面平台:

    • Windows: 最主流的桌面操作系统,用户基数庞大。

    • macOS: 面向 Apple 用户,设计和创意领域用户较多。

    • Linux: 开源系统,技术用户和服务器领域常用。

  • Web 平台 (WebGL): 无需安装,用户可以直接在浏览器中体验,方便传播和试玩。

  • 游戏主机平台:

    • PlayStation (PS4/PS5): 索尼游戏主机,拥有庞大的玩家群体。

    • Xbox (Xbox One/Xbox Series X|S): 微软游戏主机,与 Windows 生态系统紧密结合。

    • Nintendo Switch: 任天堂游戏主机,便携性和独特的玩法是其特色。

  • VR/AR 平台:

    • Oculus (Meta Quest): 流行的 VR 头显平台。

    • SteamVR: 支持多种 VR 头显的平台。

    • ARKit (iOS): Apple 的增强现实平台。

    • ARCore (Android): Google 的增强现实平台。

平台选择的考量因素:

  • 目标用户群体: 您的项目目标用户是谁?他们的设备偏好是什么?例如,如果目标用户是移动游戏玩家,Android 和 iOS 平台是首选;如果目标用户是 PC 游戏玩家,Windows 和 macOS 平台则更合适。

  • 项目类型: 不同类型的项目可能更适合不同的平台。例如,轻度休闲游戏适合移动平台和 Web 平台;大型 3A 游戏则更适合 PC 和主机平台;VR/AR 应用则需要选择相应的 VR/AR 平台。

  • 开发资源和时间: 不同平台的发布流程和适配工作量有所不同。需要根据团队的开发资源和时间预算来选择平台。

  • 商业模式: 不同的平台有不同的商业模式和盈利方式。例如,移动平台主要通过应用内购买和广告盈利;主机平台主要通过游戏销售盈利。

  • 平台特性: 每个平台都有其独特的特性和优势。例如,移动平台的触控交互,主机平台的强大性能,VR/AR 平台的沉浸式体验。

目标平台设定:

在明确以上考量因素后,您需要设定明确的目标平台。可以优先选择核心平台,再逐步扩展到其他平台。例如,对于移动游戏,可以先发布 Android 版本,再发布 iOS 版本。

7.3 Unity Build Settings 详解

Unity 的 Build Settings 窗口 (File -> Build Settings) 是平台发布的核心工具,用于配置和构建项目到不同的目标平台。

Build Settings 窗口主要包含以下几个部分:

  1. Platform 平台选择区: 列出了 Unity 支持的所有平台。您需要在此处选择您的目标平台。

    • 切换平台: 点击平台名称,然后点击 "Switch Platform" 按钮即可切换到该平台。Unity 会自动导入和配置该平台所需的组件和插件。

    • 安装模块: 如果目标平台模块未安装,Unity 会提示您安装。点击 "Open Download Page" 可以跳转到 Unity Hub 下载并安装模块。

  2. Scenes In Build 构建场景列表: 列出了项目中将被打包到最终构建中的场景。

    • 添加场景: 可以将项目资源窗口中的场景拖拽到列表中,或者点击 "Add Open Scenes" 按钮添加当前打开的场景。

    • 场景顺序: 列表中的场景顺序决定了构建后场景加载的顺序。第一个场景将作为启动场景。

    • 启用/禁用场景: 可以通过勾选场景名称左侧的复选框来启用或禁用场景。禁用的场景将不会被打包到构建中。

  3. Platform Specific Settings 平台特定设置区: 根据选择的平台,显示不同的平台特定设置选项。

    • Player Settings 玩家设置: 这是最重要的设置区域,用于配置项目的各种通用和平台特定的设置,例如:

      • Product Name, Version, Company Name: 项目名称、版本号、公司名称,这些信息会显示在应用商店和设备系统中。

      • Icon and Splash Screen: 应用图标和启动画面,用于品牌展示和用户体验。

      • Resolution and Presentation: 分辨率设置、屏幕方向、全屏模式等。

      • Other Settings: 包含 Scripting Backend (脚本后端)、API Compatibility Level (API 兼容级别)、Rendering (渲染设置)、XR Settings (XR 设置)、Publishing Settings (发布设置) 等重要选项。

    • Scripting Backend 脚本后端: 选择 Unity 使用的脚本运行时环境。

      • Mono (Deprecated): 传统的 Mono 脚本后端,已逐渐被 IL2CPP 取代。

      • IL2CPP: 将 C# 代码转换为 C++ 代码,然后编译为本地代码,性能更高,安全性更好,是推荐的脚本后端,尤其对于移动平台和主机平台。

      • WebGL: WebGL 平台默认使用 asm.js 或 WebAssembly 作为脚本后端。

    • Target Architecture 目标架构: 选择目标平台的 CPU 架构。

      • ARMv7/ARM64 (Android/iOS): 移动平台常用的 ARM 架构。

      • x86/x86_64 (Windows/macOS/Linux): 桌面平台常用的 x86 架构。

      • WebGL: WebGL 平台架构由浏览器和操作系统决定。

    • Build Options 构建选项: 提供一些额外的构建选项,例如:

      • Development Build: 构建开发版本,包含调试信息,方便开发和测试。

      • Script Debugging: 启用脚本调试,可以在构建后连接调试器进行调试。

      • Deep Profiling Support: 启用深度性能分析,可以更详细地分析项目性能。

      • Compression Method: 选择资源压缩方式,可以减小构建包大小,但会增加构建时间。

  4. Build 构建按钮区: 用于执行构建操作。

    • Build: 选择构建输出目录,开始构建项目。

    • Build And Run: 构建项目完成后,自动运行项目。

7.4 Player Settings 深度解析

Player Settings 是平台发布配置的核心,它位于 Build Settings 窗口的 Platform Specific Settings 区域。点击 "Player Settings..." 按钮可以打开 Inspector 窗口,查看和修改 Player Settings 的各项设置。

Player Settings 分为多个选项卡,每个选项卡负责不同方面的设置。以下将重点介绍几个关键选项卡及其重要设置:

  1. Product 产品信息:

    • Company Name: 公司名称,显示在应用商店和设备系统中。

    • Product Name: 产品名称,显示在应用商店和设备系统中。

    • Version: 产品版本号,用于版本管理和更新。

    • Bundle Identifier (Android) / Bundle Version (iOS): 应用包名/Bundle ID,在应用商店中唯一标识您的应用,非常重要,一旦发布后不建议轻易修改。

    • Icon 图标: 设置应用在不同平台和分辨率下的图标。务必提供高质量、不同尺寸的图标,以适配各种设备和应用商店的要求。

    • Splash Image 启动画面: 设置应用启动时的显示画面,可以用于品牌展示和加载过渡。可以自定义静态图片、动画,甚至使用 Unity 的 Splash Screen 系统。

  2. Resolution and Presentation 分辨率和显示:

    • Default Screen Width/Height: 默认屏幕宽度和高度,用于独立平台。

    • Orientation: 屏幕方向,可以选择 Portrait (竖屏)、Landscape (横屏) 或 Auto Rotation (自动旋转)。移动平台需要根据项目类型选择合适的屏幕方向。

    • Default is Full Screen: 默认是否全屏显示,适用于独立平台。

    • Run in Background: 是否允许应用在后台运行时继续运行,适用于某些类型的应用,但可能会增加电量消耗。

    • UI Scaling Mode: UI 缩放模式,用于适配不同分辨率的屏幕。

      • Constant Pixel Size: UI 元素保持像素大小不变,可能会在不同分辨率下显示大小不一致。

      • Scale With Screen Size: UI 元素根据屏幕尺寸进行缩放,可以适配不同分辨率的屏幕,推荐使用。

      • Constant Physical Size: UI 元素保持物理尺寸不变,例如在不同 DPI 的屏幕上保持相同的物理大小。

  3. Other Settings 其他设置: 包含了众多重要的设置选项,需要根据目标平台和项目需求进行配置。

    • Rendering 渲染:

      • Graphics APIs: 选择使用的图形 API (例如 OpenGL ES, Vulkan, Metal, DirectX)。Unity 会根据目标平台自动选择默认的图形 API,通常无需手动修改,除非您有特殊需求。

      • Color Space: 色彩空间,可以选择 Gamma 或 Linear。Linear 色彩空间更适合物理渲染,但性能消耗较高。Gamma 色彩空间性能较好,但颜色精度稍差。

      • Auto Graphics API for Windows/macOS/Linux: 是否允许 Unity 自动选择图形 API。建议启用,除非您需要强制使用特定的图形 API。

      • Multithreaded Rendering: 多线程渲染,可以利用多核 CPU 提升渲染性能,建议启用。

      • Static Batching/Dynamic Batching: 静态批处理和动态批处理,用于减少 Draw Calls,提升渲染性能,建议启用。

      • GPU Skinning: GPU 蒙皮,使用 GPU 进行蒙皮计算,可以提升蒙皮动画的性能,建议启用。

    • Scripting Configuration 脚本配置:

      • Scripting Backend: 选择脚本后端 (Mono, IL2CPP)。前面已经介绍过,IL2CPP 是推荐的选择。

      • API Compatibility Level: API 兼容级别,选择 .NET API 的兼容级别。通常选择 .NET Standard 2.1.NET Framework.NET Standard 2.1 跨平台兼容性更好,.NET Framework 可以访问完整的 .NET Framework API。

      • Stripping Level: 代码剥离级别,用于移除项目中未使用的代码,减小构建包大小。可以选择 Disabled, Normal, Stripping Micro, Stripping Medium, Stripping High。剥离级别越高,构建包越小,但可能会导致某些代码被错误剥离,需要谨慎使用。

    • Optimization 优化:

      • Preload Assets: 预加载资源,可以在启动时加载常用的资源,加快场景加载速度。

      • Asset Compression: 资源压缩,可以选择不同的压缩算法来减小资源大小。

      • Texture Compression: 纹理压缩,选择适合目标平台的纹理压缩格式,可以减小纹理内存占用和构建包大小。例如,Android 平台常用 ETC2 或 ASTC,iOS 平台常用 PVRTC 或 ASTC。

    • XR Settings XR 设置: 用于配置 VR/AR 相关设置,例如 VR SDK 的选择 (Oculus, SteamVR, etc.),AR SDK 的配置 (ARKit, ARCore, etc.),以及 XR 功能的启用。

    • Publishing Settings 发布设置: 包含平台特定的发布设置,例如:

      • Keystore (Android): Android 应用签名证书,用于发布到 Google Play Store。必须配置正确的 Keystore 才能发布 Android 应用。

      • Provisioning Profile and Signing Certificate (iOS): iOS 应用 Provisioning Profile 和签名证书,用于发布到 Apple App Store。必须配置正确的 Provisioning Profile 和签名证书才能发布 iOS 应用。

7.5 平台特定代码实践

为了更好地适配不同的平台,我们常常需要编写平台特定的代码。Unity 提供了多种方式来实现平台特定代码的编写:

  1. 平台条件编译 (#if 预处理指令): 使用 #if#elif#else#endif 等预处理指令,根据不同的平台编译不同的代码块。

    void Update() { #if UNITY_ANDROID // Android 平台特定代码 if (Input.touchCount > 0) { // 处理触控输入 } #elif UNITY_IOS // iOS 平台特定代码 if (Input.touchCount > 0) { // 处理触控输入 } #elif UNITY_STANDALONE_WIN // Windows 平台特定代码 if (Input.GetMouseButtonDown(0)) { // 处理鼠标点击输入 } #elif UNITY_WEBGL // WebGL 平台特定代码 // ... #else // 其他平台通用代码 // ... #endif }

    常用的平台宏定义:

    • UNITY_EDITOR: Unity 编辑器环境

    • UNITY_STANDALONE_WIN: Windows 独立平台

    • UNITY_STANDALONE_OSX: macOS 独立平台

    • UNITY_STANDALONE_LINUX: Linux 独立平台

    • UNITY_ANDROID: Android 平台

    • UNITY_IOS: iOS 平台

    • UNITY_WEBGL: WebGL 平台

    • UNITY_TVOS: tvOS 平台

    • UNITY_XBOXONE: Xbox One 平台

    • UNITY_PS4: PlayStation 4 平台

    • UNITY_SWITCH: Nintendo Switch 平台

    • UNITY_WSA: Universal Windows Platform (UWP)

    • UNITY_VR: VR 平台 (通用宏)

    • UNITY_XR_OCULUS: Oculus VR 平台

    • UNITY_XR_STEAMVR: SteamVR 平台

    • UNITY_AR: AR 平台 (通用宏)

    • UNITY_IOS_API: iOS API 可用

    • UNITY_ANDROID_API: Android API 可用

  2. Platform Dependent Compilation (平台依赖编译): 将平台特定的代码分别放在不同的文件夹中,Unity 会根据目标平台自动编译相应的代码。

    • Assets 文件夹下创建平台特定的文件夹,例如 Plugins/AndroidPlugins/iOSPlugins/WebGLPlugins/Windows 等。

    • 将平台特定的代码文件 (例如 .cs, .dll, .jar, .a, .jslib) 放入相应的文件夹中。

    • Unity 在构建不同平台时,会自动包含对应平台文件夹下的代码,而忽略其他平台文件夹下的代码。

    这种方式更适合管理平台特定的插件和库文件。

  3. SystemInfo.operatingSystemFamily API: 在运行时通过 SystemInfo.operatingSystemFamily API 获取当前运行的操作系统家族,然后根据不同的操作系统执行不同的逻辑。

    using UnityEngine; public class PlatformDetector : MonoBehaviour { void Start() { OperatingSystemFamily osFamily = SystemInfo.operatingSystemFamily; switch (osFamily) { case OperatingSystemFamily.Windows: Debug.Log("Running on Windows"); // Windows 平台特定代码 break; case OperatingSystemFamily.MacOSX: Debug.Log("Running on macOS"); // macOS 平台特定代码 break; case OperatingSystemFamily.Linux: Debug.Log("Running on Linux"); // Linux 平台特定代码 break; case OperatingSystemFamily.Android: Debug.Log("Running on Android"); // Android 平台特定代码 break; case OperatingSystemFamily.iOS: Debug.Log("Running on iOS"); // iOS 平台特定代码 break; case OperatingSystemFamily.WebGL: Debug.Log("Running on WebGL"); // WebGL 平台特定代码 break; default: Debug.Log("Running on Unknown Platform"); // 通用代码 break; } } }

    这种方式适用于运行时需要动态判断平台的情况。

选择哪种方式取决于您的具体需求:

  • 平台条件编译 (#if): 最常用、最灵活的方式,适用于简单的平台特定逻辑,例如输入处理、UI 适配等。

  • 平台依赖编译 (文件夹): 适用于管理平台特定的插件和库文件,例如 SDK 集成、本地库依赖等。

  • SystemInfo.operatingSystemFamily API: 适用于运行时需要动态判断平台的情况,例如根据平台加载不同的配置数据。

7.6 构建、测试与优化

平台发布是一个迭代的过程,需要经过多次构建、测试和优化才能达到最佳效果。

构建流程:

  1. 配置 Build Settings 和 Player Settings: 根据目标平台和项目需求,仔细配置 Build Settings 和 Player Settings 的各项参数。

  2. 选择构建平台: 在 Build Settings 窗口中选择目标平台。

  3. 执行构建: 点击 "Build" 或 "Build And Run" 按钮,选择构建输出目录,开始构建。

  4. 等待构建完成: 构建时间取决于项目大小和复杂度,可能需要几分钟到几小时不等。

  5. 获取构建产物: 构建完成后,会在指定的输出目录生成平台特定的构建产物,例如 Android 的 .apk 文件,iOS 的 Xcode 工程,Windows 的 .exe 文件,WebGL 的 WebGL 构建文件夹等。

测试流程:

  1. 真机测试: 务必在真实的目标设备上进行测试,例如 Android 手机、iOS 设备、PC 电脑、Web 浏览器等。模拟器或编辑器预览效果可能与真机运行效果有所差异。

  2. 功能测试: 测试项目的所有功能是否正常运行,包括游戏逻辑、UI 交互、资源加载、网络连接、支付系统等。

  3. 性能测试: 测试项目的性能表现,包括帧率、内存占用、CPU 占用、GPU 占用、发热情况等。可以使用 Unity Profiler 工具进行性能分析。

  4. 兼容性测试: 测试项目在不同设备、不同操作系统版本、不同浏览器版本下的兼容性。

  5. 用户体验测试: 邀请用户进行体验测试,收集用户反馈,了解用户对项目的评价和建议。

优化方向:

  • 性能优化:

    • Draw Calls 优化: 减少 Draw Calls,可以使用 Static Batching, Dynamic Batching, GPU Instancing 等技术。

    • Shader 优化: 优化 Shader 代码,减少 Shader 计算量。

    • 纹理优化: 使用合适的纹理压缩格式,减小纹理内存占用。

    • 网格优化: 优化模型网格,减少顶点数和三角形数。

    • 脚本优化: 优化 C# 脚本代码,避免不必要的计算和内存分配。

    • 资源加载优化: 使用异步资源加载,避免卡顿。

    • LOD (Level of Detail) 技术: 使用 LOD 技术,根据物体距离调整模型细节程度。

    • Occlusion Culling (遮挡剔除) 技术: 使用遮挡剔除技术,只渲染可见的物体。

  • 包体大小优化:

    • 资源压缩: 使用资源压缩,减小资源大小。

    • 代码剥离: 使用代码剥离,移除未使用的代码。

    • AssetBundle 技术: 使用 AssetBundle 技术,将资源分包加载,减小初始包体大小。

    • 纹理格式优化: 选择合适的纹理格式,例如 ETC2, ASTC, PVRTC 等,减小纹理大小。

  • 用户体验优化:

    • UI 适配: 适配不同分辨率和屏幕尺寸的 UI。

    • 输入优化: 优化触控输入、键盘鼠标输入、手柄输入等。

    • 加载速度优化: 优化场景加载速度、资源加载速度。

    • 安装包大小优化: 减小安装包大小,方便用户下载和安装。

7.7 发布与部署

完成构建、测试和优化后,就可以将项目发布到目标平台了。不同的平台有不同的发布流程和要求。

常见的平台发布流程:

  • Android (Google Play Store):

    1. 准备 Google Play 开发者账号。

    2. 配置 Android Keystore 签名证书。

    3. 构建 Android .apk.aab 文件。

    4. 在 Google Play Console 创建应用,填写应用信息 (名称、描述、截图、视频等)。

    5. 上传 .aab 文件 (推荐) 或 .apk 文件。

    6. 配置定价和分发区域。

    7. 提交审核。

    8. 审核通过后发布。

  • iOS (Apple App Store):

    1. 准备 Apple Developer Program 开发者账号。

    2. 配置 iOS Provisioning Profile 和 Signing Certificate。

    3. 构建 Xcode 工程。

    4. 使用 Xcode 打包和上传应用到 App Store Connect。

    5. 在 App Store Connect 创建应用,填写应用信息 (名称、描述、截图、视频等)。

    6. 配置定价和分发区域。

    7. 提交审核。

    8. 审核通过后发布。

  • WebGL (Web Server):

    1. 构建 WebGL 构建文件夹。

    2. 将 WebGL 构建文件夹上传到 Web 服务器 (例如 Apache, Nginx, IIS 等)。

    3. 配置 Web 服务器,确保可以访问 index.html 文件。

    4. 通过浏览器访问 WebGL 应用 URL。

  • Windows/macOS/Linux (Standalone):

    1. 构建对应平台的独立构建包 (例如 .exe, .app, Linux 可执行文件)。

    2. 可以选择将构建包打包成安装程序 (例如 Windows 的 .msi 或 Inno Setup, macOS 的 .dmg, Linux 的 .deb.rpm),方便用户安装。

    3. 可以通过自己的网站、Steam、Itch.io 等平台分发。

  • 游戏主机平台 (PlayStation, Xbox, Nintendo Switch): 主机平台的发布流程较为复杂,通常需要与主机厂商 (Sony, Microsoft, Nintendo) 合作,签署开发者协议,获取开发工具包 (SDK),并遵循主机厂商的发布规范和审核流程。

发布注意事项:

  • 应用商店审核规范: 务必仔细阅读并遵守各应用商店的审核规范,避免因违反规范而被拒绝发布或下架。

  • 版本管理: 使用版本控制系统 (例如 Git) 管理项目代码,清晰记录每个发布版本的修改内容。

  • 用户隐私保护: 如果项目涉及到用户数据收集,务必遵守用户隐私保护政策,例如 GDPR, CCPA 等。

  • 持续更新和维护: 发布后并非结束,还需要持续关注用户反馈,进行 bug 修复、性能优化、内容更新等维护工作。

7.8 总结

平台发布是 Unity3D 项目开发流程中的最后也是至关重要的一步。本章节详细介绍了平台发布的相关知识和实践,涵盖了平台选择、Build Settings 详解、Player Settings 配置、平台特定代码实践、构建测试优化以及发布部署流程。希望通过本章节的学习,您能够掌握 Unity3D 平台发布的关键技能,将您的优秀作品成功推向世界,触达更多用户!

Mermaid 图总结平台发布流程:

平台发布是一个复杂而细致的工作,需要耐心和细心。希望本章节的内容能为您提供有力的帮助,祝您的项目发布顺利!


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U