[Unity 杂货铺] 游戏项目的结构规划与初始化
1 前言
仅作存档,尽量简洁,备忘即可。不详细说明每个步骤,部分内容与先前文章有重复。
目前采用单一仓库的方式,将所有相关代码、资源、文档和工具整合到一个Git仓库中,将来看情况是否需要分成多个仓库。
Unity 项目框架,尝试使用 TEngine:https://github.com/Alex-Rachel/TEngine,主要是包含了 HybridCLR + YooAsset + 目录结构 + 启动流程。
但也要注意版本和兼容情况,整体结构不要堆积得太复杂,看能否裁剪拆卸掉不需要的部分,或者自己去导入第三方插件而不是使用整合包。
2 目录结构
MelonGame/ # 仓库根目录
│
├── .gitignore # Git忽略配置
├── README.md # 项目总说明文档
├── LICENSE # 许可证文件
│
├── Unity/ # Unity主工程目录
│ ├── Assets/
│ ├── ProjectSettings/
│ ├── Packages/
│ ├── UserSettings/
│ ├── obj/
│ ├── Library/
│ ├── Logs/
│ └── Temp/
│
├── ArtProjects/ # 美术工程源文件
│ ├── Blender/
│ │ ├── Characters/
│ │ ├── Environments/
│ │ ├── Props/
│ │ └── Exports/ # 导出文件目录
│ │
│ ├── Photoshop/
│ │ ├── UI/
│ │ ├── Textures/
│ │ ├── Icons/
│ │ └── Exports/
│ │
│ ├── Substance/
│ │ ├── Materials/
│ │ └── Exports/
│ │
│ ├── Fmod/ # 音频项目
│ │ ├── Events/
│ │ ├── Banks/
│ │ └── Exports/
│ │
│ └── Spine/ # Spine动画
│ ├── Animations/
│ └── Exports/
│
├── Documentation/ # 项目文档
│ ├── Design/ # 策划文档
│ │ ├── GameDesignDocument.md
│ │ ├── Mechanics/
│ │ ├── Balancing/
│ │ └── Progression/
│ │
│ ├── Technical/ # 技术文档
│ │ ├── Architecture/
│ │ ├── APIs/
│ │ ├── Guidelines/
│ │ └── Backend/
│ │
│ ├── Art/ # 美术文档
│ │ ├── StyleGuide/
│ │ ├── AssetPipeline/
│ │ └── References/
│ │
│ └── Production/ # 生产文档
│ ├── Milestones/
│ ├── Roadmap/
│ └── MeetingNotes/
│
├── Tools/ # 开发工具和脚本
│ ├── EditorTools/ # Unity编辑器工具
│ │ ├── CustomInspectors/
│ │ ├── BuildAutomation/
│ │ └── AssetPipeline/
│ │
│ ├── BuildTools/ # 构建工具
│ │ ├── CI_CD/
│ │ ├── Deployment/
│ │ └── Packaging/
│ │
│ ├── ExternalTools/ # 第三方工具
│ │ ├── TextureCompressors/
│ │ ├── ModelOptimizers/
│ │ └── BatchProcessors/
│ │
│ └── UtilityScripts/ # 实用脚本
│ ├── Python/
│ ├── Shell/
│ └── PowerShell/
│
├── Config/ # 配置文件
│ ├── GameConfig/ # 游戏配置
│ │ ├── Balancing/
│ │ ├── Localization/
│ │ └── GameSettings/
│ │
│ ├── EditorConfig/ # 编辑器配置
│ │ ├── Unity/
│ │ ├── VS_Code/
│ │ └── IDE_Settings/
│ │
│ └── BuildConfig/ # 构建配置
│ ├── Android/
│ ├── iOS/
│ └── Desktop/
│
├── Tests/ # 测试相关
│ ├── UnitTests/
│ ├── IntegrationTests/
│ ├── PlayModeTests/
│ └── PerformanceTests/
│
├── ThirdParty/ # 第三方库和插件
│ ├── Plugins/
│ ├── SDKs/
│ └── Libraries/
│
└── .github/ # GitHub配置
├── workflows/
├── ISSUE_TEMPLATE/
└── PULL_REQUEST_TEMPLATE/
Assets/
├── AssetArt/ # 美术资源目录
│ └── Atlas/ # 自动生成图集目录
├── AssetRaw/ # 热更资源目录
│ ├── UIRaw/ # UI 图片目录
│ │ ├── Atlas/ # 需要自动生成图集的 UI 素材目录
│ │ └── Raw/ # 不需要自动生成图集的 UI 素材目录
│ ├── Audios/ # 音频资源
│ ├── Effects/ # 特效资源
│ └── Scenes/ # 场景资源
├── Editor/ # 编辑器脚本目录
├── HybridCLRData/ # HybridCLR 相关目录
├── Scenes/ # 主场景目录
├── TEngine/ # 框架核心目录
│ ├── Editor/ # TEngine 编辑器核心代码
│ ├── Runtime/ # TEngine 运行时核心代码
│ └── AssetSetting/ # YooAsset 资源设置
└── GameScripts/ # 程序集目录
├── Main/ # 主程序程序集(启动器与流程)
└── HotFix/ # 游戏热更程序集目录
├── GameBase/ # 游戏基础框架程序集 [Dll]
├── GameProto/ # 游戏配置协议程序集 [Dll]
└── GameLogic/ # 游戏业务逻辑程序集 [Dll]
├── GameApp.cs # 热更主入口
└── GameApp_RegisterSystem.cs # 热更主入口注册系统
3 初始化 Git
3.1 设置 Asset Serialization 为 Force Text
打开 Edit -> Project Settings,选中左侧 Editor,右侧 Asset Serialization 设置为 Force Text。
3.2 设置 Version Control Mode 为 Visible Meta Files
打开 Edit -> Project Settings,选中左侧 Version Control,右侧 Mode 设置为 Visible Meta Files。
3.3 创建 .gitignore 文件
在 Unity 项目的根目录,即 Assets 的同级目录下,创建 .gitignore 文件:
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
.utmp/
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
*.log
# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control.
*.blend1
*.blend1.meta
# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
# Recordings can get excessive in size
/[Rr]ecordings/
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Jetbrains Rider personal-layer settings
*.DotSettings.user
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Mono auto generated files
mono_crash.*
# Builds
*.apk
*.aab
*.unitypackage
*.unitypackage.meta
*.app
# Crashlytics generated file
crashlytics-build.properties
# TestRunner generated files
InitTestScene*.unity*
# Addressables default ignores, before user customizations
/ServerData
/[Aa]ssets/StreamingAssets/aa*
/[Aa]ssets/AddressableAssetsData/link.xml*
/[Aa]ssets/Addressables_Temp*
# By default, Addressables content builds will generate addressables_content_state.bin
# files in platform-specific subfolders, for example:
# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin
/[Aa]ssets/AddressableAssetsData/*/*.bin*
# Visual Scripting auto-generated files
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta
# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*
3.4 创建 .gitattributes 文件
参考“Git 配置与实践”,在 Unity 项目的根目录,创建 .gitattributes 文件
3.5 初始化本地仓库
在 Unity 项目的根目录,执行命令:<font style="color:rgb(25, 27, 31);">git init</font>
3.6 提交和推送文件
执行命令:
git add .
git commit -m "Init Project."
git branch -M main
git remote add origin <repository-url>
git push -u origin main
4 插件安装
4.1 安装 HotReload 插件
4.2 安装 com.unity.ide.windsurf
Github 仓库:https://github.com/Asuta/com.unity.ide.windsurf
Unity -> Window -> Package Manager -> Add package from git URL
5 参考资料
https://github.com/Alex-Rachel/TEngine
https://github.com/Cysharp/UniTask

浙公网安备 33010602011771号