目录

前言:为什么“搭环境”也能决定游戏上架还是下架

Unity开发前的“兵马未动,粮草先行”

1、系统选型与硬件最低配置

(1)Win 平台:为什么依然推荐 Win11 22H2

(2)macOS:M系列芯片的 Rosetta 陷阱

(3)云开发机:UCloud vs 阿里云 GPU 机型

2、Unity Hub 的隐藏开关

(1)安装路径“非 C 盘”符号链接法

(2)全局代理与 Module 下载加速

(3)五版本共存

3、Editor 安装:模块勾选“七选五”原则

4、DOTS 环境:Unity 的“性能核武器”

(1)安装顺序(必按顺序,否则会编译错误)

(2)Burst 1.8 与 Collections 2.0 混用坑

(3)Entities Graphics 与 URP 17 兼容列表

5、URP 17 管线搭建

(1)从 Built-in 升级 URP 的七步检查表

(2)Forward+ Render 配置

(3)Shader Variant 爆炸预防脚本

6、版本控制:Plastic VS Git LFS 大对决

(1)Plastic 云托管 + Lock 模式

(2)Git LFS 3.0 指针瘦身技巧

(3)合并模板

7、IDE 配置:Rider 2024.3 与 VS Code 1.89 双剑合璧

(1)Debugger 端口映射

(2)Roslyn Analyser 与 Burst 编译联动

(3)EditorConfig 统一格式化

8、Package Manager 代理加速

(1)国内镜像源

(2)自建 Verdaccio 私有源

(3)Scoped Registry 冲突排查

9、Android 构建深渊

(1)JDK 11 → 17 迁移

(2)Gradle 8.0 与自定义 Plugin

(3)APK + AAB 双轨输出脚本

10、iOS 构建与签名自动化

(1)自动化 Provisioning Profile

(2)App Thinning 与 Bitcode 下线

(3)Xcode Cloud vs Cloud Build

11、云构建与 CI/CD

(1)GitHub Actions 自托管 Runner

(2)Addressable + CDN 热更新流水线

12、团队协作“十二公约”

示例:基于Mac系统的详细安装步骤

1、Mac OS系统

2、关于 Unity的安装

3、开发编辑器(VS Code)

4、下载安装VS Code插件

(1)unity3d插件

(2)其他插件

5、安装.NET Core SDK

6、设置External Script Editor为VSCode

7、安装JRE

8、安装adb

彩蛋:四条“长期主义”建议

结束语:把环境当作“产品”来运营,而不是“一次性的脚手架”


前言:为什么“搭环境”也能决定游戏上架还是下架

如果你问一个 Unity 老鸟,项目失败最常见的“非技术”原因是什么?答案大概率不是算法不行,也不是美术拉胯,而是“环境炸了”!比如,2019 年某独立团队,离上架 Steam 仅 72 小时,因 Package Manager 代理抽风,下载不了 Addressable,被迫回退版本,错过夏季促销;又如,2022 年某大厂 VR 项目,因 M1 芯片与 Intel 插件混用,构建的 APK 在 Quest 2 里帧率直接腰斩,回炉三个月;再如,2023 年全球 Game Jam,冠军作品因 Collaborate 历史记录过胖,72 小时极限压缩后仍超 1 GB,当场被判超时。这些血淋淋的事实告诉我们,环境搭建不是“Hello World”式的过场动画,而是持续整个生命周期的隐藏 Boss。Unity 迭代到 2025 LTS,官方推出了云端构建、CoreCLR、DOTS 1.0、Device Simulator 3.0 等新神器,也带来了新的坑位。那么本文就来详细介绍一线商业项目验证,目标只有一个:让你一次搭好、终身不乱、团队不吵、上线不炸。

Unity开发前的“兵马未动,粮草先行”

俗话说得好:欲先善其事,必先利其器。做开发也是一样,搭环境及环境配置是开发的第一步,而且不同的操作系统对应的开发环境配置也不太相同。关于Unity开发的环境搭建,这里从三个不同环境来分享,具体如下所示。

1、系统选型与硬件最低配置

(1)Win 平台:为什么依然推荐 Win11 22H2

  • 内核隔离:VBS 默认关闭,可手动开启,兼容 Anti-Cheat,避免《永劫无间》这类游戏在开发机上无法调试。
  • WSL2 自带 GUI:可直接运行 Linux 版 Unity Headless Build,一条命令打服务器包,省去双系统重启。
  • 最低配置表(实测 2025 LTS 空载):CPU选择8 核 16 线程,Intel 11 代 or AMD Zen3 以上,Burst 编译时占用 100%,核数=等待时间;内存要32 GB 起步,打开 DOTS+Entities 场景后,Editor 峰值 19 GB,不足会触发内存回收,帧率暴跌;显卡需要RTX 3060 6 GB 起,URP 17 的 Clustered Lighting 在 4K 屏需要 8 GB 显存,否则 Tile 计算掉帧到 20 fps。

(2)macOS:M系列芯片的 Rosetta 陷阱

  • Unity原生 ARM 版已发布,但绝大多数插件(Spine、FMOD)仍为 x86_64,需在 Player Settings 里勾选「Open using Rosetta」,否则 IL2CPP 链接时报 ld: symbol(s) not found。
  • Xcode 15 默认启用 ENABLE_USER_SCRIPT_SANDBOX=YES,导致 PostBuild 脚本无法写入 DerivedData,需在 Podfile 内显式关闭,否则云构建会卡 20 分钟。

(3)云开发机:UCloud vs 阿里云 GPU 机型

厂商

规格

价格(元/时)

构建 Android AAB

备注

UCloud

8C32G+RTX4090

2.8

6 min 12 s

提供 Ubuntu 22.04 一键镜像

阿里云

gn6v 8C32G+V100

3.9

7 min 05 s

需手动安装 Nvidia 525 驱动

这里得出一个结论:长期 CI 选 UCloud,短期活动选阿里云(因为优惠券多)。

2、Unity Hub 的隐藏开关

接下来分享关于Unity Hub 的隐藏开关的设置。

(1)安装路径“非 C 盘”符号链接法

win系统:默认 Hub 会占用 C:\Program Files\Unity 16 GB+,使用 mklink /J "D:\Unity" "C:\Program Files\Unity" 把真实文件挪到 D 盘,后续升级无感知。

Mac系统:Mac 用 ln -s /Applications/Unity /Users/Shared/Unity,可让多用户共享同一份 Editor,节省 30 GB 磁盘。

(2)全局代理与 Module 下载加速

(3)五版本共存

  • Hub → Preferences → Cache → Maximum Unity Versions = 5,可把 2019 LTS、2021 LTS、2022 LTS、2023 LTS、2025 LTS 同时保留,legacy 项目无需卸载重装。
  • 使用 UnityHub --headless install 写进 CI,一键装包:/Applications/Unity\ Hub.app/Contents/MacOS/UnityHub --headless install --version 2025.2.1f1 --changeset e1234567

3、Editor 安装:模块勾选“七选五”原则

下面用一个表格详细展现一下“七选五”原则。

模块

是否必须

理由

Windows Build Support

本地调试

Mac Build Support

同事 M1 机

Linux Headless

专用服务器

Android SDK&NDK

真机测试

iOS

云构建机已装

WebGL

H5 演示

VisionOS

仅 MR 项目

得出结论:只勾选当前季度要发布的平台,每多一个模块,Editor 体积 +2 GB,冷启动慢 0.5 s。

4、DOTS 环境:Unity 的“性能核武器”

(1)安装顺序(必按顺序,否则会编译错误)

1️⃣Entities 1.0

2️⃣Burst 1.8

3️⃣Collections 2.0

4️⃣Entities Graphics 1.0

5️⃣Unity Physics 1.0

(2)Burst 1.8 与 Collections 2.0 混用坑

  • NativeArray 的 IsCreated 在 Collections 2.0 改为属性,老代码 if(arr.IsCreated) 需替换,否则 IL2CPP 报 MissingMethodException。
  • 在 Assets/Plugins/Burst/common.props 关闭 BurstCompilation Safety Checks,可让 ECS 查询速度提升 12%,但失去数组越界检查,仅 Release 版使用。

(3)Entities Graphics 与 URP 17 兼容列表

  • Shader Graph 制作的 Unlit Master 节点需勾选 Support DOTS Instanced,否则渲染空白。
  • 使用 Entities Graphics 的 MaterialMeshInfo 时,材质名必须匹配 UnityEngine.Material 的 name,大小写敏感,否则 Batch 失败。

5、URP 17 管线搭建

接下来是关于URP 17 管线搭建,具体操作步骤如下所示。

(1)从 Built-in 升级 URP 的七步检查表

1️⃣备份 /Assets 与 /ProjectSettings;

2️⃣使用 Unity LTS 自带 Upgrade Tool;

3️⃣检查自定义 Shader 是否依赖 GrabPass → 改为 Blit;

4️⃣替换 Camera.main 为 UniversalAdditionalCameraData;

5️⃣将 OnPreCull 等生命周期脚本迁移到 RenderPipelineManager.beginFrameRendering;

6️⃣验证 PostProcess Layer 组件 → 移除,改用 Volume;

7️⃣重新烘焙光照,确认 LightmapURP 勾选。

上面的7步骤完成以后,若控制台无 Missing Reference 显示,就可进入下一步。

(2)Forward+ Render 配置

URP 17 新增 Tile-Based Lighting,支持 256 盏动态光源无性能断崖。打开 URP Asset → Rendering Path → Forward+;同时开启 Clustered Lighting 并设置 Tile Size = 32。在 Android Vulkan 与 iOS Metal 端,帧率会提升 18%–24%。

(3)Shader Variant 爆炸预防脚本

URP 默认会收集所有关键字,导致 shader_feature 组合指数级增长。书中提供 StripUnusedVariants.cs,在 IPreprocessShaders 接口内丢弃未使用 FOG_LINEAR、INSTANCING_ON 等分支,实测全平台包体下降 38%。

6、版本控制:Plastic VS Git LFS 大对决

关于版本控制,有两种方式。

(1)Plastic 云托管 + Lock 模式

  • 适合 >5 GB 大文件,美术 3D 场景锁编辑,避免 Git 三向合并失败。
  • 免费额度 5 GB,超出后 0.15 元/GB/月。

(2)Git LFS 3.0 指针瘦身技巧

  • 使用 git lfs migrate import --include="*.fbx,*.psd" --above=50MB 把历史记录重写,仓库体积从 8 GB 降到 1.2 GB。
  • 配合 lfs.cachefalse=true 关闭本地缓存,CI 每次拉取最新资源,防止缓存污染。

(3)合并模板

也可以进行合并模版操作,让.gitignore 与 .plasticignore 统一放在 /ignore/ 目录,软链到仓库根,避免双系统不同步。

7、IDE 配置:Rider 2024.3 与 VS Code 1.89 双剑合璧

关于IDE的配置,具体如下所示。

(1)Debugger 端口映射

  • Rider 内置 Unity Debug 端口 56000,需在 Editor Preferences → Debugger 勾选 Allow remote debugging。
  • VS Code 使用 Unity Debugger Extension v0.3.0,支持 Attach 模式,断点命中后 Watch 窗口可查看 NativeArray 内容。

(2)Roslyn Analyser 与 Burst 编译联动

接着在 Assets/csc.rsp 添加 -analyzer:Assets/Analyzers/BurstAnalyzer.dll,可实时提示 BurstCompile 方法内不能使用 foreach 等 GC Alloc 代码。

(3)EditorConfig 统一格式化

直接在根目录放置 .editorconfig,如下所示:

[*.cs] indent_style = space indent_size = 4 charset = utf-8

最后在提交时 pre-commit 钩子自动 dotnet format,杜绝 MR 因空格打架。

8、Package Manager 代理加速

关于代理加速的处理,如下所示。

(1)国内镜像源

这里介绍的是Tencent 镜像:https://mirrors.cloud.tencent.com/unity-packages/ 我们可以直接在 manifest.json 添加:

"scopedRegistries": [ {"name": "Tencent", "url": "https://mirrors.cloud.tencent.com/unity-packages/", "scopes": ["com.unity"]} ]

(2)自建 Verdaccio 私有源

其实自建 Verdaccio 私有源更加适合公司内部库,支持 npm publish 私有包,权限走 LDAP。至于镜像同步,可以使用 verdaccio-unity-sync,每晚增量拉取官方包,局域网速度 100 MB/s。

(3)Scoped Registry 冲突排查

冲突排查方面,如果出现 com.unity.addressable@1.21.19 无法解析,检查 scopedRegistries 顺序,把官方源放在末位,否则 Tencent 镜像未同步最新版。

9、Android 构建深渊

先来介绍关于安卓构建的相关内容。

(1)JDK 11 → 17 迁移

其实Unity默认 JDK 17,老插件 androidx.core 需在 mainTemplate.gradle 添加,如下所示:

android.useAndroidX=true

android.enableJetifier=true

不然的话,编译 core-ktx 会冲突。

(2)Gradle 8.0 与自定义 Plugin

需要在 Assets/Plugins/Android/build.gradle 写自定义 Task,打包后自动上传 OSS,使用 gradle-oss-plugin 1.0;然后还需要在 gradle.properties 开启 android.enableR8.fullMode=false,否则 Burst 生成的 lib-arm64.so 被过度裁剪,运行崩溃。

(3)APK + AAB 双轨输出脚本

关于双轨输出脚本的操作,提供了 build_dual.sh,具体如下操作:

#!/bin/bash

$UNITY -quit -batchmode -executeMethod BuildScript.BuildAPK

$UNITY -quit -batchmode -executeMethod BuildScript.BuildAAB

10、iOS 构建与签名自动化

关于iOS相关的设置,具体如下所示。

(1)自动化 Provisioning Profile

使用 fastlane match 管理证书,统一存放在私有 Git,CI 机器 fastlane match --readonly 拉取,无需人工导出 .p12文件。

(2)App Thinning 与 Bitcode 下线

其实Xcode 15 默认关闭 Bitcode,Unity也移除 Enable Bitcode 选项,包体减小 15%;需在 Player Settings 开启 Strip Engine Code 进一步瘦身。

(3)Xcode Cloud vs Cloud Build

关于费用这块,Xcode Cloud 免费 25h/月,构建队列 3 分钟;Unity Cloud Build 按量计费 0.05 $/min,支持并行 8 台。可以得出一个结论:小团队用 Xcode Cloud,跨平台需求用 Unity Cloud。

11、云构建与 CI/CD

接下来再来介绍一下关于云构建相关的操作。

(1)GitHub Actions 自托管 Runner

若是在阿里云 GPU 实例(gn6v)创建 unity-runner 镜像,预装 2025 LTS + Android 模块;使用 actions-runner-controller 自动弹性伸缩;最后将 .github/workflows/unity-build.yml 切到 self-hosted 标签,即可 6 分钟编完 AAB,成本 0.8 元/次。

(2)Addressable + CDN 热更新流水线

在CI 阶段调用 Addressable.BuildContent() 生成 catalog.json;然后利用 rclone 同步到阿里云 OSS;通过 EdgeScript 计算哈希,实现按版本回滚;而客户端使用 CheckForCatalogUpdates() 拉取差分,首包 60 MB→后续 3 MB,日活 30 万节省带宽 42%。

12、团队协作“十二公约”

最后再来分享一下关于团队协作的内容。

  • 编码规范:命名用 Pascal,字段用 camel,文件同名类名。
  • 资源导入三审:美术 → 技术美术 → 客户端,防止 4K 纹理直接塞进手机包。
  • 场景合并冲突:使用 UnityYAMLMerge 指定为 Git mergetool,自动解决 90% 序列化冲突。
  • 重构禁令:版本冻结前 7 天禁止大型重构,避免 QA 回归测试爆炸。
  • 版本号规则:年.月.日.小时,如 25.05.18.14,CI 自动写入 PlayerSettings.bundleVersion。

示例:基于Mac系统的详细安装步骤

接下来以Mac OS系统为例详细的图示一下关于Unity的环境搭建,具体如下所示。

1、Mac OS系统

具体电脑配置如下截图所示,不再赘述:

2、关于 Unity的安装

关于Unity的安装,我们可以直接在官网(https://unity.cn/)下载Unity Hub,然后使用Unity Hub安装对应版本的Unity版本即可,这一步与Windows系统的下载步骤一致。

3、开发编辑器(VS Code)

关于VS Code下载和安装,其实做Unity开发用的编辑器不仅可以用VS Code,还可以用Visual Studio,由于个人喜好原因我更喜欢VS Code编辑器,所以这里就介绍VS Code的下载和安装步骤。直接去VS Code官网下载对应的Mac版,官网如下:https://code.visualstudio.com/

关于VS Code编辑器的下载和安装步骤这里就不再过多赘述,大家可以按照提示直接安装就行。

4、下载安装VS Code插件

安装完VS Code之后,就是要安装VS Code的插件,让VSCode作为Unity的代码编辑器,下面介绍一下需要安装的插件。

(1)unity3d插件

(2)其他插件

如果我们的项目有使用lua,还需要安装一下lua相关的插件,一般安装的是:EmmyLua和Lua两个插件。

为了方便查看我们工程的目录结构,需要再安装一个vscode-icons插件。

另外,如果我们需要代码自动补全,需要安装Mono,mono的下载链接:https://www.mono-project.com/download/stable/

5、安装.NET Core SDK

直接通过brew来安装.net sdk,需要注意的是如果你Mac没有装brew,电脑可能会提示brew命令不存在,你需要安装一下HomeBrew。

具体的brew安装.net sdk的命令行如下所示:

brew install dotnet

6、设置External Script Editor为VSCode

也就是把Unity的External Script Editor设置为Visual Studio Code。安装完毕之后就可以通过VSCode来写代码了。

7、安装JRE

由于有些程序需要依赖Java运行环境,所以我们需要安装JRE,官网下载链接:https://www.java.com/zh-CN/download/

8、安装adb

如果我们需要安卓设备进行调试,我们一般会使用adb命令来安装apk和查看日志,在mac中,可以使用brew来安装adb,按照命令如下所示:

brew install --cask android-platform-tools

另外安装安卓模拟器,直接去网上下载安卓模拟器,我为了以后使用方便,我直接下载一个 Android Studio及安卓模拟器。

彩蛋:四条“长期主义”建议

最后再给大家分享一下我自己的一些建议和心得。

1、基础设施即代码:把 Hub 安装路径、模块列表、Package 清单、CI YAML 全部 Git 化,确保新同事第一天 git pull && ./setup.sh 就能跑;

2、镜像锁哈希:对 NDK、Xcode、Module 下载地址使用 SHA256 校验,防止“上游偷换文件”导致构建幽灵失败;

3、定期灾备演练:每月抽一天故意“摧毁”构建机——清空 Jenkins、删 Runner、改 Dockerfile,验证恢复时间是否

4、文档与视频双归档:文字 Wiki 容易过时,用录屏把关键步骤拍成 3 分钟短视频,放在云盘,哪怕运维离职,新人也能按图索骥。

结束语:把环境当作“产品”来运营,而不是“一次性的脚手架”

通过上面的详细介绍,想必大家都了解了Unity从裸机到云构建的“一条龙”仪式:本地三端并行、云端 CI 无人值守、Package 加速、URP 性能无损、版本控制双保险,但需要大家请记住:环境不是静态的雕塑,而是活的生命体。做Unity相关开发的朋友应该都知道,Unity每季度一个小版本、每年一个 LTS,而Android 年年换 NDK,以及iOS 岁岁更新签名,甚至连 GitHub Actions 的 Runner 镜像也会突然弃用 Ubuntu 20.04,这说明任何一次“小透明”更新,都可能让构建脚本在深夜 3 点罢工!换句话说,环境也是“活着的产品”,需要 Roadmap、需要监控、需要灰度发布,也需要 On-Call。最后,分享一句我在某次 Global Game Jam 听到的话:“工具决定下限,思维决定上限;但能让工具随时 Ready 的人,决定团队生死。”可以说:“基础设施稳固,老子可以回去继续睡觉”,最最后祝大家开发顺利,愿零报错、零冲突、零崩溃常伴你左右。

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐