game-tools-workflows
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGame Development Tools & Workflows
游戏开发工具与工作流
Development Tool Stack
开发工具栈
┌─────────────────────────────────────────────────────────────┐
│ GAME DEV TOOL STACK │
├─────────────────────────────────────────────────────────────┤
│ ENGINE: Unity / Unreal / Godot │
│ │
│ IDE: Visual Studio / Rider / VS Code │
│ │
│ VERSION CONTROL: │
│ Git + LFS (indie) / Perforce (large teams) │
│ │
│ ART TOOLS: │
│ Blender / Maya / Substance Painter / Photoshop │
│ │
│ AUDIO: │
│ Wwise / FMOD / Reaper / Audacity │
│ │
│ PROJECT MANAGEMENT: │
│ Jira / Notion / Trello / Linear │
│ │
│ COMMUNICATION: │
│ Slack / Discord / Teams │
└─────────────────────────────────────────────────────────────┘┌─────────────────────────────────────────────────────────────┐
│ GAME DEV TOOL STACK │
├─────────────────────────────────────────────────────────────┤
│ ENGINE: Unity / Unreal / Godot │
│ │
│ IDE: Visual Studio / Rider / VS Code │
│ │
│ VERSION CONTROL: │
│ Git + LFS (独立团队) / Perforce (大型团队) │
│ │
│ ART TOOLS: │
│ Blender / Maya / Substance Painter / Photoshop │
│ │
│ AUDIO: │
│ Wwise / FMOD / Reaper / Audacity │
│ │
│ PROJECT MANAGEMENT: │
│ Jira / Notion / Trello / Linear │
│ │
│ COMMUNICATION: │
│ Slack / Discord / Teams │
└─────────────────────────────────────────────────────────────┘Git Workflow for Games
游戏开发Git工作流
GIT BRANCHING STRATEGY:
┌─────────────────────────────────────────────────────────────┐
│ │
│ main ─────●─────────●─────────●─────────● (releases) │
│ ↑ ↑ ↑ ↑ │
│ develop ──●──●──●───●──●──●───●──●──●───● (integration) │
│ ↑ ↑ ↑ ↑ │
│ feature/X─●──● ●──● │
│ │
│ BRANCH TYPES: │
│ main: Production releases only │
│ develop: Integration branch, daily builds │
│ feature/*: New features, short-lived │
│ fix/*: Bug fixes │
│ release/*: Release preparation │
└─────────────────────────────────────────────────────────────┘
GIT LFS CONFIGURATION:
┌─────────────────────────────────────────────────────────────┐
│ .gitattributes: │
│ *.psd filter=lfs diff=lfs merge=lfs -text │
│ *.fbx filter=lfs diff=lfs merge=lfs -text │
│ *.wav filter=lfs diff=lfs merge=lfs -text │
│ *.mp3 filter=lfs diff=lfs merge=lfs -text │
│ *.png filter=lfs diff=lfs merge=lfs -text │
│ *.tga filter=lfs diff=lfs merge=lfs -text │
│ *.zip filter=lfs diff=lfs merge=lfs -text │
└─────────────────────────────────────────────────────────────┘GIT BRANCHING STRATEGY:
┌─────────────────────────────────────────────────────────────┐
│ │
│ main ─────●─────────●─────────●─────────● (发布版本) │
│ ↑ ↑ ↑ ↑ │
│ develop ──●──●──●───●──●──●───●──●──●───● (集成分支) │
│ ↑ ↑ ↑ ↑ │
│ feature/X─●──● ●──● │
│ │
│ BRANCH TYPES: │
│ main: 仅用于生产环境发布 │
│ develop: 集成分支,每日构建 │
│ feature/*: 新功能分支,短期存在 │
│ fix/*: Bug修复分支 │
│ release/*: 发布准备分支 │
└─────────────────────────────────────────────────────────────┘
GIT LFS CONFIGURATION:
┌─────────────────────────────────────────────────────────────┐
│ .gitattributes: │
│ *.psd filter=lfs diff=lfs merge=lfs -text │
│ *.fbx filter=lfs diff=lfs merge=lfs -text │
│ *.wav filter=lfs diff=lfs merge=lfs -text │
│ *.mp3 filter=lfs diff=lfs merge=lfs -text │
│ *.png filter=lfs diff=lfs merge=lfs -text │
│ *.tga filter=lfs diff=lfs merge=lfs -text │
│ *.zip filter=lfs diff=lfs merge=lfs -text │
└─────────────────────────────────────────────────────────────┘Commit Convention
提交规范
COMMIT MESSAGE FORMAT:
┌─────────────────────────────────────────────────────────────┐
│ PREFIX: Description (max 50 chars) │
│ │
│ PREFIXES: │
│ feat: New feature │
│ fix: Bug fix │
│ art: Art/visual changes │
│ audio: Sound/music changes │
│ level: Level design changes │
│ refactor: Code restructuring │
│ perf: Performance improvements │
│ test: Test additions/changes │
│ ci: CI/CD changes │
│ docs: Documentation │
│ │
│ EXAMPLES: │
│ feat: Add double jump ability │
│ fix: Resolve player falling through floor │
│ art: Update hero character textures │
│ perf: Optimize enemy spawning system │
└─────────────────────────────────────────────────────────────┘COMMIT MESSAGE FORMAT:
┌─────────────────────────────────────────────────────────────┐
│ 前缀: 描述 (最多50字符) │
│ │
│ 前缀列表: │
│ feat: 新增功能 │
│ fix: Bug修复 │
│ art: 美术/视觉资源变更 │
│ audio: 音效/音乐变更 │
│ level: 关卡设计变更 │
│ refactor: 代码重构 │
│ perf: 性能优化 │
│ test: 测试用例新增/变更 │
│ ci: CI/CD流程变更 │
│ docs: 文档更新 │
│ │
│ 示例: │
│ feat: 添加二段跳能力 │
│ fix: 修复玩家穿模问题 │
│ art: 更新主角角色纹理 │
│ perf: 优化敌人生成系统 │
└─────────────────────────────────────────────────────────────┘Build Automation
构建自动化
python
undefinedpython
undefined✅ Production-Ready: Build Script
✅ 生产就绪: 构建脚本
import subprocess
import os
from datetime import datetime
class GameBuilder:
def init(self, project_path: str, unity_path: str):
self.project_path = project_path
self.unity_path = unity_path
self.build_number = self._get_build_number()
def build(self, platform: str, config: str = "Release"):
build_path = f"Builds/{platform}/{self.build_number}"
args = [
self.unity_path,
"-quit",
"-batchmode",
"-projectPath", self.project_path,
"-executeMethod", "BuildScript.Build",
f"-buildTarget", platform,
f"-buildPath", build_path,
f"-buildConfig", config,
"-logFile", f"Logs/build_{platform}.log"
]
result = subprocess.run(args, capture_output=True)
if result.returncode != 0:
raise Exception(f"Build failed: {result.stderr}")
return build_path
def _get_build_number(self) -> str:
return datetime.now().strftime("%Y%m%d.%H%M")undefinedimport subprocess
import os
from datetime import datetime
class GameBuilder:
def init(self, project_path: str, unity_path: str):
self.project_path = project_path
self.unity_path = unity_path
self.build_number = self._get_build_number()
def build(self, platform: str, config: str = "Release"):
build_path = f"Builds/{platform}/{self.build_number}"
args = [
self.unity_path,
"-quit",
"-batchmode",
"-projectPath", self.project_path,
"-executeMethod", "BuildScript.Build",
f"-buildTarget", platform,
f"-buildPath", build_path,
f"-buildConfig", config,
"-logFile", f"Logs/build_{platform}.log"
]
result = subprocess.run(args, capture_output=True)
if result.returncode != 0:
raise Exception(f"Build failed: {result.stderr}")
return build_path
def _get_build_number(self) -> str:
return datetime.now().strftime("%Y%m%d.%H%M")undefinedTeam Workflow
团队工作流
AGILE SPRINT WORKFLOW:
┌─────────────────────────────────────────────────────────────┐
│ DAY 1: Sprint Planning │
│ • Review backlog │
│ • Commit to sprint goals │
│ • Break into tasks │
├─────────────────────────────────────────────────────────────┤
│ DAILY: Standup (15 min) │
│ • What did you do? │
│ • What will you do? │
│ • Any blockers? │
├─────────────────────────────────────────────────────────────┤
│ CONTINUOUS: Development │
│ • Work on tasks │
│ • Daily builds/tests │
│ • Code reviews │
├─────────────────────────────────────────────────────────────┤
│ PLAYTEST: Mid-sprint │
│ • Team plays current build │
│ • Gather feedback │
│ • Adjust priorities │
├─────────────────────────────────────────────────────────────┤
│ END: Sprint Review + Retro │
│ • Demo completed work │
│ • What went well/poorly? │
│ • Improvements for next sprint │
└─────────────────────────────────────────────────────────────┘敏捷迭代工作流:
┌─────────────────────────────────────────────────────────────┐
│ 第1天: 迭代规划 │
│ • 梳理产品待办列表 │
│ • 确认迭代目标 │
│ • 拆解为具体任务 │
├─────────────────────────────────────────────────────────────┤
│ 每日: 站会 (15分钟) │
│ • 昨日完成工作? │
│ • 今日计划工作? │
│ • 有无阻塞问题? │
├─────────────────────────────────────────────────────────────┤
│ 持续: 开发阶段 │
│ • 处理任务 │
│ • 每日构建/测试 │
│ • 代码评审 │
├─────────────────────────────────────────────────────────────┤
│ 中期: 内部试玩 │
│ • 团队体验当前版本 │
│ • 收集反馈 │
│ • 调整优先级 │
├─────────────────────────────────────────────────────────────┤
│ 末期: 迭代评审+回顾 │
│ • 演示完成的工作 │
│ • 哪些做得好/不好? │
│ • 制定下一轮迭代改进措施 │
└─────────────────────────────────────────────────────────────┘🔧 Troubleshooting
🔧 故障排查
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Merge conflicts in scene files │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Use prefabs instead of scene objects │
│ → Smart merge tools (Unity Smart Merge) │
│ → Coordinate who works on which scenes │
│ → Use scene additivity │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Repository growing too large │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Configure Git LFS properly │
│ → Clean up old branches │
│ → Don't commit generated files (Library/) │
│ → Use .gitignore templates for game engines │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Builds breaking frequently │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Add CI build on every PR │
│ → Implement smoke tests │
│ → Require passing builds before merge │
│ → Add pre-commit hooks for validation │
└─────────────────────────────────────────────────────────────┘┌─────────────────────────────────────────────────────────────┐
│ 问题: 场景文件合并冲突 │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 使用预制件替代场景对象 │
│ → 智能合并工具 (Unity Smart Merge) │
│ → 协调分工,明确谁负责哪些场景 │
│ → 使用场景加载叠加性 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 问题: 仓库体积过大 │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 正确配置Git LFS │
│ → 清理旧分支 │
│ → 不要提交生成文件 (Library/) │
│ → 使用游戏引擎专属.gitignore模板 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 问题: 构建频繁失败 │
├─────────────────────────────────────────────────────────────┤
│ 解决方案: │
│ → 为每个PR添加CI构建检查 │
│ → 实现冒烟测试 │
│ → 要求构建通过后才能合并 │
│ → 添加提交前钩子做验证 │
└─────────────────────────────────────────────────────────────┘Essential .gitignore
必备.gitignore
gitignore
undefinedgitignore
undefinedUnity
Unity
Library/
Temp/
Obj/
Build/
*.csproj
*.unityproj
*.sln
Library/
Temp/
Obj/
Build/
*.csproj
*.unityproj
*.sln
Unreal
Unreal
Intermediate/
Saved/
DerivedDataCache/
*.sln
Intermediate/
Saved/
DerivedDataCache/
*.sln
Common
Common
*.log
*.tmp
.DS_Store
Thumbs.db
---
**Use this skill**: When setting up pipelines, managing assets, or automating builds.*.log
*.tmp
.DS_Store
Thumbs.db
---
**使用本技能场景**:搭建管线、管理资源或自动化构建时。