Правильная структура игрового проекта для 3D игры на Unity 3D
Разберу правильную структуру проекта для 3D‑игры на Unity — с логичной организацией папок и файлами, удобной для командной работы и масштабирования.
Базовая структура папок
My3DGame/
├── Assets/
│ ├── Scripts/
│ │ ├── Core/
│ │ ├── Gameplay/
│ │ ├── UI/
│ │ ├── Characters/
│ │ ├── Weapons/
│ │ └── Utilities/
│ ├── Scenes/
│ ├── Prefabs/
│ ├── Materials/
│ ├── Models/
│ │ ├── Characters/
│ │ ├── Environment/
│ │ └── Props/
│ ├── Textures/
│ │ ├── UI/
│ │ ├── Characters/
│ │ └── Environment/
│ ├── Audio/
│ │ ├── SFX/
│ │ ├── Music/
│ │ └── Voice/
│ ├── Animations/
│ │ ├── Characters/
│ │ └── Objects/
│ ├── Plugins/
│ └── Resources/
├── ProjectSettings/
└── Packages/
Детальное описание папок
1. Assets/ — основная папка проекта
Содержит все ассеты игры. Внутри организуем по категориям:
-
Scripts/ — все скрипты C#. Подразделы:
-
Core/— базовые системы (менеджер игры, менеджер сцен, менеджер сохранения); -
Gameplay/— логика игрового процесса (управление уровнями, система очков); -
UI/— скрипты пользовательского интерфейса; -
Characters/— скрипты персонажей (управление, ИИ, анимации); -
Weapons/— скрипты оружия и атак; -
Utilities/— вспомогательные утилиты (математические функции, расширения).
-
-
Scenes/ — все игровые сцены:
-
MainMenu.unity— главное меню; -
Level_01.unity— первый уровень; -
Loading.unity— экран загрузки.
-
-
Prefabs/ — префабы игровых объектов:
-
Player.prefab— префаб игрока; -
Enemy.prefab— префаб врага; -
Pickup_Health.prefab— аптечка; -
Weapon_Pistol.prefab.
-
-
Materials/ — материалы для шейдеров и текстур.
-
Models/ — 3D‑модели:
-
Characters/— модели персонажей; -
Environment/— окружение (здания, деревья); -
Props/— мелкие объекты (стулья, ящики).
-
-
Textures/ — текстуры:
-
UI/— текстуры интерфейса; -
Characters/— текстуры персонажей; -
Environment/— текстуры окружения.
-
-
Audio/ — звуковые файлы:
-
SFX/— звуковые эффекты; -
Music/— музыка; -
Voice/— озвучка.
-
-
Animations/ — анимации:
-
Characters/— анимации персонажей (бег, прыжок, атака); -
Objects/— анимации объектов (открытие дверей, взрывы).
-
-
Plugins/ — сторонние плагины и библиотеки.
-
Resources/ — ассеты, загружаемые через
Resources.Load()(используйте осторожно — может увеличить размер сборки).
2. ProjectSettings/
Автоматически создаётся Unity. Содержит настройки проекта (физика, теги, слои, Input Manager и т. д.). Не редактируйте вручную без необходимости.
3. Packages/
Управляется Package Manager Unity. Содержит установленные пакеты (Post‑Processing, Cinemachine и др.).
Дополнительные рекомендации
Именование файлов и папок
-
Используйте PascalCase для классов, скриптов и префабов (
PlayerController.cs,MainMenu.prefab). -
Используйте snake_case для ассетов (
player_texture.png,level_01_scene.unity). -
Избегайте пробелов и специальных символов.
-
Делайте имена понятными и описательными.
Организация скриптов
-
Разделяйте логику на небольшие классы с единственной ответственностью.
-
Используйте пространства имён (namespaces) для избежания конфликтов:
namespace My3DGame.Gameplay { public class LevelManager : MonoBehaviour { /* ... */ } } -
Применяйте паттерны проектирования:
-
Singleton — для глобальных менеджеров (
GameManager,AudioManager); -
Observer/Event System — для коммуникации между объектами;
-
Factory — для создания игровых объектов.
-
Работа с префабами
-
Все игровые объекты должны быть префабами — так легче вносить изменения и поддерживать консистентность.
-
Используйте вложенные префабы для сложных объектов (например, машина с колёсами, сиденьями и т. д.).
Управление сценами
-
Создавайте отдельные сцены для:
-
главного меню;
-
каждого уровня;
-
экрана загрузки;
-
настроек.
-
-
Для больших уровней используйте Additive Loading — подгружайте части уровня по мере необходимости.
Оптимизация ассетов
-
Сжимайте текстуры (
Compression Format,Max Size). -
Оптимизируйте модели (снижайте полигонаж там, где это возможно).
-
Используйте LOD Groups для объектов, видимых на расстоянии.
-
Применяйте Occlusion Culling для статического окружения.
Версионирование и бэкапы
-
Используйте систему контроля версий (Git) с
.gitignoreдля исключения временных файлов Unity. -
Регулярно делайте бэкапы проекта.
Документация
-
Создайте файл
README.mdв корне проекта с описанием структуры и инструкций для новых разработчиков. -
Добавляйте комментарии к сложным участкам кода.
Пример структуры для небольшой 3D‑игры (шутер от первого лица)
FPSGame/
├── Assets/
│ ├── Scripts/
│ │ ├── Core/GameManager.cs
│ │ ├── Gameplay/LevelManager.cs, ScoreManager.cs
│ │ ├── UI/HUDController.cs, MenuManager.cs
│ │ ├── Characters/PlayerController.cs, EnemyAI.cs
│ │ ├── Weapons/Weapon.cs, Pistol.cs, Rifle.cs
│ │ └── Utilities/MathUtils.cs
│ ├── Scenes/MainMenu.unity, Level_01.unity, Loading.unity
│ ├── Prefabs/Player.prefab, Enemy.prefab, Bullet.prefab
│ ├── Materials/Player.mat, Ground.mat
│ ├── Models/Characters/Player.fbx, Enemy.fbx
│ ├── Textures/UI/health_icon.png, Characters/player_diffuse.tga
│ ├── Audio/SFX/gunshot.wav, Music/ambient.mp3
│ ├── Animations/Characters/player_run.anim, player_idle.anim
│ └── Plugins/Cinemachine/
└── ProjectSettings/, Packages/
Такая структура обеспечит:
-
лёгкость поиска нужных файлов;
-
удобство командной работы;
-
масштабируемость проекта;
-
простоту поддержки и рефакторинга.
Хотите, я раскрою какой‑то аспект подробнее или помогу адаптировать структуру под конкретный тип игры?
Комментариев 1