Skip to main content
摘要:本文聚焦「Unity 项目文件夹结构规范」,梳理核心概念、关键方法与落地实践。
文档目标: 终结“按类型放”还是“按模块放”的争论。 核心结论: 采用 “混合式架构” (Hybrid Approach)。底层通用资源按类型,上层业务逻辑按模块。

1. ⚖️ 核心哲学:为什么纯“按类型”是错误的?

❌ 传统做法 (按类型 / Type-Based)

  • Assets/Scripts/Player/PlayerController.cs
  • Assets/Prefabs/Player/Player.prefab
  • Assets/Textures/Player/Skin.png
  • 痛点: 当你想删除“玩家”功能,或者想把“玩家”功能迁移到另一个项目时,你需要跨越 5 个大文件夹去寻找相关文件。高耦合,低内聚。

✅ 现代做法 (按特性 / Feature-Based)

  • Assets/Features/Player/
    • Scripts/
    • Prefabs/
    • Art/
  • 优势: 删掉 Player 文件夹,整个功能就删干净了。

2. 🌳 黄金目录树 (The Golden Tree)

这是适用于中大型(塔防/RPG)项目的标准结构。

3. 📂 关键文件夹详解

3.1 _Project (根目录隔离)

为什么要这一层? 当你从 Asset Store 下载插件时,它们通常会直接安装在 Assets 根目录下。如果你把自己的代码也放在 Assets 根目录下,很快你的文件就会和插件文件混在一起。
  • 规则: 所有的原创内容,必须放在 _Project(或 _Game)里。Assets 根目录只留给插件和系统文件夹。

3.2 Features (特性/模块目录)

这是“按模块放”哲学的核心。
  • 原则: 如果一个资源(图片/音效)只被某个特定模块使用(例如:只有火法师塔用的火焰特效贴图),那么它就应该放在 Features/Towers/FireTower/ 里面,而不是 Art/Textures 里面。
  • 判定标准:
    • 独享资源 -> 放 Features/[ModuleName]/
    • 共享资源 -> 放 _Project/Art/_Project/Audio/

3.3 Art vs Features

很多美术同学习惯按 Art/Characters, Art/Weapons 提交资源。
  • 开发建议:
    • Art 文件夹作为“仓库”。美术提交的原始模型、贴图放在这里。
    • Features 文件夹作为“组装车间”。程序在这里制作 Prefab。
    • Prefab 引用 Art 里的模型。
    • 如果项目较小,可以直接把美术资源也拖进 Features 里,不再保留 Art 文件夹,实现完全的模块化。

3.4 StreamingAssets

  • 用途: 这里的文不会被 Unity 压缩或打包成二进制,保持原始格式。
  • 场景:
    • PC 版游戏读取外部配置 (.json, .xml)。
    • 手机版播放视频 (.mp4)。
    • WebGL 甚至不支持多线程读取这里。

4. 🚫 常见错误 (Bad Practices)

  1. 根目录混乱:
    • Assets/Player.cs
    • Assets/MyGameScript.cs
    • 后果: 看起来像个 Demo,不像正经项目。
  2. 滥用 Resources:
    • Assets/Resources/Textures/All_Game_Textures...
    • 后果: 见《资产管理实战指南》,这是性能杀手。
  3. 拼写不一致:
    • Assets/Script (单数)
    • Assets/Prefabs (复数)
    • 规范: 建议统用复数 (Scripts, Prefabs, Models, Textures)。
  4. 空文件夹:
    • Git 默认不上传空文件夹。如果一定要保留结构,在里面放一个 .keep 文件。

5. 🤖 自动化建议

你可以写一个简单的 Editor 脚本,在项目初始化时自动创建这些文件夹,保证所有团队成员的结构一致。