Game_Num_Basics_And_Calc

📂 Unity 项目文件夹结构规范 (Folder Structure Standards)

文档目标: 终结“按类型放”还是“按模块放”的争论。 核心结论: 采用 “混合式架构” (Hybrid Approach)。底层通用资源按类型,上层业务逻辑按模块。


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

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

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


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

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

Assets/
├── _Project/                   # 🔒 核心开发区 (加下划线置顶)
│   ├── Art/                    # 🎨 通用美术资源 (被多个模块复用的)
│   │   ├── Animations/
│   │   ├── Materials/          # 通用材质 (如全屏后处理)
│   │   ├── Models/             # 环境、建筑等静态模型
│   │   ├── Shaders/
│   │   ├── Textures/           # 地面、天空盒
│   │   └── UI/                 # 通用 UI (按钮、窗口底板、通用图标)
│   │   
│   ├── Audio/                  # 🔊 音频资源
│   │   ├── BGM/
│   │   └── SFX/                # 通用音效 (UI点击、升级成功)
│   │   
│   ├── Core/                   # 🧠 核心框架 (不依赖具体玩法)
│   │   ├── AudioSystem/
│   │   ├── EventSystem/
│   │   ├── SaveSystem/
│   │   └── UIManager/
│   │   
│   ├── Features/               # 🧩 玩法模块 (按功能切分 - 最重要!)
│   │   ├── Enemies/            # 敌人模块
│   │   │   ├── Bosses/
│   │   │   ├── Minions/
│   │   │   └── EnemySpawner.cs
│   │   ├── Towers/             # 塔模块
│   │   │   ├── ArcherTower/    # 包含该塔的 Prefab, Script, 独有贴图
│   │   │   └── MagicTower/
│   │   ├── Player/             # 玩家模块
│   │   └── Inventory/          # 背包系统
│   │   
│   ├── Scenes/                 # 🎬 场景文件
│   │   ├── Boot.unity          # 启动场景
│   │   ├── Menu.unity
│   │   └── Levels/
│   │   
│   └── Resources/              # 🚫 慎用!仅放 Logo 或 Loading 预制体
│
├── Plugins/                    # 🔌 第三方插件 (DoTween, Odin, Sirenix)
├── StreamingAssets/            # 🌊 流式资源 (视频、热更包)
└── Editor/                     # 🛠️ 存放编辑器工具脚本 (AssetNamingValidator.cs)

3. 📂 关键文件夹详解

3.1 _Project (根目录隔离)

为什么要这一层? 当你从 Asset Store 下载插件时,它们通常会直接安装在 Assets 根目录下。如果你把自己的代码也放在 Assets 根目录下,很快你的文件就会和插件文件混在一起。

3.2 Features (特性/模块目录)

这是“按模块放”哲学的核心。

3.3 Art vs Features

很多美术同学习惯按 Art/Characters, Art/Weapons 提交资源。

3.4 StreamingAssets


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 脚本,在项目初始化时自动创建这些文件夹,保证所有团队成员的结构一致。

// 放在 Assets/Editor/ProjectSetup.cs
[MenuItem("Tools/Setup Project Folders")]
public static void CreateFolders() {
    string root = "Assets/_Project";
    Directory.CreateDirectory($"{root}/Art");
    Directory.CreateDirectory($"{root}/Audio");
    Directory.CreateDirectory($"{root}/Code");
    Directory.CreateDirectory($"{root}/Features");
    Directory.CreateDirectory($"{root}/Scenes");
    AssetDatabase.Refresh();
}