Unity 常用工程目录结构与实践

一份能直接照搬的 Unity 工程目录指引,涵盖顶层结构、常见子目录用途与 Git 忽略清单,帮团队快速落地规范。

为什么要统一目录结构

统一的目录命名与归类能缩短新成员熟悉项目的时间,也方便脚本、资源与自动化流程的管理。尤其在多人协作、持续集成场景下,目录结构越干净,成本越低。

顶层结构速查

目录 核心内容 说明
Assets/ 项目资源与代码 分自研 _Project、插件 Plugins、第三方 ThirdParty 等模块
Packages/ 包清单与本地包 记录 Unity Package Manager 依赖,建议纳入版本控制
ProjectSettings/ 项目级配置(渲染、输入等) 不同平台/分支会变动,协作时务必提交
UserSettings/ 本地偏好(编辑器布局、缓存等) 只影响个人环境,通常放入 .gitignore

新建项目后,可先按表格搭好骨架,再逐步填充具体资源,避免后期大规模改动。

Assets 目录拆解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Assets/
_Project/ # 项目自研内容
Scripts/
Runtime/ # 运行时逻辑脚本
Editor/ # 仅在编辑器生效的工具脚本
Scenes/ # 场景文件
Prefabs/ # 预制体
Materials/ # 材质
Shaders/ # Shader 与着色资源
Textures/ # 贴图
Models/ # 模型
Audio/ # 音频
Animations/ # 动画与 Animator Controller
UI/ # UI 相关素材与预制
Resources/ # Resources.Load 所需文件(谨慎使用)
Plugins/ # 官方或商业插件(保持只读)
ThirdParty/ # 开源库、SDK 等第三方资源
Gizmos/ # 自定义 Gizmo 图标
StreamingAssets/ # 原样打包的流式资源

_Project/:自研内容集中地

  • Scripts/Runtime:对外提供 namespace,按功能模块拆子目录,保持一功能一文件夹。
  • Scripts/Editor:只放编辑器扩展脚本,避免被打进最终包体;必要时用 #if UNITY_EDITOR 防御。
  • Scenes/:以功能划分,如 MainMenu.unityGameplay.unity。多人协作时先锁定再修改,减少冲突。
  • Prefabs/:按业务模块或 UI 层级再细分,如 Prefabs/UI/Prefabs/Enemies/
  • Resources/:仅留必须在运行时动态加载的资源,并配合 Addressables 或自定义加载器做出清单管理。

插件与第三方资源

  • Plugins/:保持原目录结构,方便升级;若需修改,先 fork 并在 README 中记录差异。
  • ThirdParty/:用于存放 SDK、开源库或工具包,建议附带版本说明文档。
  • Gizmos/:放置场景视图的图标,帮助调试定位。
  • StreamingAssets/:原样打进包体的资源,如字典表、本地化或解压包。

Packages/ProjectSettings/UserSettings/

  • Packages/manifest.jsonpackages-lock.json 共同决定依赖,团队统一安装后直接提交。
  • ProjectSettings/:涉及 Build、Quality、Input 等关键配置;平台切换时注意同步。
  • UserSettings/:包含布局、缓存等个人数据,正常情况下放进 .gitignore 即可。

推荐 .gitignore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# ===== Unity 临时缓存(可再生成)=====
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
[Bb]uilds/
[Ll]ogs/
[Mm]emoryCaptures/
UserSettings/

# ===== Unity 录制与诊断输出 =====
[Rr]ecordings/
sysinfo.txt
mono_crash.*

# ===== IDE 与工程配置(自动生成)=====
.vs/
.gradle/
ExportedObj/
.consulo/
.idea/
.vscode/
*.code-workspace
*.DotSettings.user

# ===== 解决方案与调试产物 =====
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.pidb.meta
*.booproj
*.svd
*.pdb
*.pdb.meta
*.mdb
*.mdb.meta
*.opendb
*.VC.db

# ===== 构建输出与分发包 =====
*.apk
*.aab
*.unitypackage

# ===== 第三方插件(按需忽略示例)=====
# JetBrains Rider 插件(Unity 自动生成)
[Aa]ssets/Plugins/Editor/JetBrains*
# Asset Store 工具(若不需提交请取消注释)
#[Aa]ssets/AssetStoreTools*
# Ludiq Peek 示例
Assets/Ludiq/Ludiq.PeekCore
Assets/Ludiq/Ludiq.Peek
Assets/Ludiq.Generated/Transient
# Odin Inspector 演示与 AOT 输出
Assets/Plugins/Sirenix/Assemblies/AOT/*
Assets/Plugins/Sirenix/Demos/*
!/Assets/Plugins/Sirenix/Demos/*.unitypackage
# Gaia 示例资源
Assets/Procedural*Worlds/Gaia/Asset*Samples/*
Assets/Samples/Terrain*Tools/*

# ===== 系统垃圾文件(macOS / Windows)=====
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
*.stackdump
[Dd]esktop.ini
$RECYCLE.BIN/
*.cab
*.msi
*.msix
*.msm
*.msp
*.lnk

若团队引入新的构建目录或缓存文件,先确认是否确实需要忽略,再更新规则,避免误删必要资产。

落地建议

  • 新增模块前先约定命名:例如 UI 统一前缀 UI_,资源引用更直观。
  • 变更目录记得同步文档:配合项目 Wiki 或 README,减少“找不到资源”的沟通成本。
  • 定期复查:版本迭代或团队调整后,安排一次目录体检,确保结构与当前需求一致。