个人开发文档

📅 2026/6/30 5:38:12
个人开发文档
《渡》开发文档一款像素风叙事解谜手游。玩家扮演摆渡人引导六位逝者完成未了心愿在莫比乌斯环式的叙事中最终完成摆渡人的自我救赎。项目信息引擎Unity 2022 LTS平台iOS / Android/ pc分辨率480×270 → 等比缩放适配开发周期~16周 (2025.6.9–2025.9.21)开发规模1人一、技术选型1.1 为什么选 Unity跨平台移动端导出iOS Android 一次开发双端发布Unity 对移动端 IL2CPP、纹理压缩、触摸输入的支持成熟非对话玩法需求本项目包含填色、拼图、拖拽、寻物等交互Ren’Py 等视觉小说引擎无法胜任像素渲染友好天然支持 Point Filter、Pixel Perfect Camera、Tilemap无需额外渲染管线生态成熟移动端性能分析工具Profiler、Frame Debugger、Asset Store 素材丰富1.2 核心架构决策决策理由单例 GameManagerDontDestroyOnLoad跨场景全局状态管理存档/读档/章节解锁全部由单点控制SceneLoader 统一接管所有跳转确保转场效果一致避免 SceneManager.LoadScene 裸调用的不一致存档用 JSON可读可调试Unity JsonUtility 直接支持无需引入第三方库Canvas RawImage 做全屏特效Fade/溶解/模糊 都覆盖在 UI 层不影响游戏世界相机二、术语定义术语含义渡口 Hub序章场景玩家的基地。陈列信物、翻名册、选择章节、查看进度名册B 交给玩家的逝者名册记录六位逝者信息完成章节后解锁新页信物每个逝者的代表物品完成章节后出现在渡口的对应柱子上faceNoise玩家的面孔噪声值0~8代表记忆破碎程度决定转场效果和展示记忆恢复程度像素溶解faceNoise ≥ 6 时启用的转场效果噪声图驱动的像素逐渐消失/显现模糊聚焦faceNoise 3~4 时启用的转场效果画面从模糊逐渐清晰光点系统渡口 Hub 的视觉进度指示解锁章节越多光点越亮越密莫比乌斯环本作的叙事结构摆渡人即是最后一个逝者首尾相连三、游戏设计3.1 世界观与叙事框架莫比乌斯环叙事结构——玩家从渡口出发依次引导六位逝者完成心愿最后发现第七个逝者就是自己。3.2 人物关系| 角色| A摆渡人/玩家| B引路人/NPC| Ch1 失聪音乐家| Ch2 绝症少年| Ch3 公交车司机| Ch4 战地记者| Ch5 阿兹海默老人| Ch6 乡村教师3.3 章节设计章节核心玩法结局序章渡口场景 B 出现交名册 翻名册引导 像素对话框1Ch1 失聪音乐家色盘填色1Ch2 绝症少年病房寻物 六物成镜1Ch3 公交车司机光影气泡拖拽1Ch4 战地记者照片取舍3Ch5 阿兹海默老人拼图 × 遗忘机制3Ch6 乡村教师一轴一格时间轴归位1Ch7 摆渡人自渡逆流而上 B 渡 A13.4 渡口 Hub 功能信物陈列完成章节后上柱名册渐进解锁每完成一章解锁下一页光点系统视觉进度指示章节选择已解锁的章节可重玩3.5 美术规格| 参数 | 值 || 设计分辨率 | 480 × 270 || Filter Mode | Point (no filter) —— 每张导入的图都要设 || Pixels Per Unit | 16 || 色彩模式 | 索引色 / 有限色板像素风一致 || 美术总数 | 约 290 张含角色、场景、UI、特效 || 作者|我自己|具体剧本和玩法在6.16日讨论完四、到现在已完成工作4.1 代码文件清单| 文件 | 位置 | 功能 || GameManager.cs | Scripts/Core | 单例 存档系统自动/手动/分支 章节状态 信物追踪 重玩模式 || SaveData.cs | Scripts/Core | 序列化数据结构挂 GameManager 文件末尾 || MainMenu.cs |Scipts | 开始界面继续/读档/新游戏/章节选择/退出 || chapertselet.cs|Scipts |章节重玩的构建4.2 目前项目结构Assets/ ├── Scenes/ │ └── Prologue_Hub.unity ← 当前空场景MainCamera ├── Scripts/ │ ├── Core/ │ │ ├── GameManager.cs ✅ │ │ ├── SceneLoader.cs │ │ │ └── UI/ │ ├── FadeScreen.cs │ ├── MainMenu.cs ✅ │ ├── chapertselet.cs ✅ │ └── ├── Shaders/ │ └── ├── Sprites/ │ ├── Chapters/ │ ├── UI/ │ └── Hub/ └── Audio/五、待办事项5.1 立即要做6月26日| # | 任务 | 说明 || 1 | 搭建 MainMenu 场景 | Canvas 5个Button 挂 MainMenu.cs FadeCanvas 预制体 |1| 2 | 场景加入 Build Settings | File → Build Settings → 把 Prologue_Hub 和 MainMenu 拖进去 || 3 | 替换 SceneManager.LoadScene | MainMenu.cs 里三处裸调用改成 SceneLoader |5.2 本周目标6月26–29日| 目标 | 内容 || 序章跑通 | 渡口场景 B 出现交名册 翻名册点 Ch1 像素对话框 || Ch2 病房寻物 | 6 物件点击拾取逻辑 终场六物成镜先代码跑通美术用灰块代替 || 回到 Hub | 完成 Ch2 后回渡口信物上柱名册第二页解锁 |六、跨场景通信机制6.1 GameManager 单例通过DontDestroyOnLoad在场景切换时保持存活所有场景通过GameManager.Instance访问全局状态Awake()中已有重复检测确保每个场景只有一个实例6.2 关键数据流Prologue_Hub → Chapter_02 流程: ┌──────────────┐ 翻名册点Ch2 ┌────────────┐ │ Prologue_Hub │ ─────────────────→ │ Chapter_02 │ │ │ │ │ │ 读取存档 │ │ 拾取6物件 │ │ 显示已解锁 │ │ 完成拼镜 │ └──────────────┘ └─────┬──────┘ ↑ │ │ TransitionManager │ │ .GoToScene(Prologue_Hub) │ └──────────────────────────────────┘ GameManager 写入 - chapterStates[Ch2] true - collectedTokens[绝症少年] 六物成镜 - 自动存档 save_auto.json6.3 回渡口后的状态同步Prologue_Hub 的Start()读取GameManager.Instance.chapterStateschapterStates[Ch2] true→ 信物上柱、名册第三页解锁、对应光点点亮chapterStates[Ch1] true→ 同理序章完成后解锁第二页重玩模式已解锁章节可重复进入不覆盖已有存档分支存档 branch_xxx.json6.4 场景间数据传递不需要传参所有状态存在 GameManager目标场景自己读转场入口唯一TransitionManager.Instance.GoToScene(场景名)存档时机进入新场景前自动存档退出章节时手动存档点七、技术备忘7.1 关键常量| 参数 | 值 || 设计分辨率 | 480 × 270 || 输出缩放 | 等比缩放短边撑满 || Canvas Scaler | Scale With Screen Size, Reference 480×270 || Filter Mode | Point (no filter) || Pixels Per Unit | 16 || Unity 版本 | 2022 LTS |7.2 移动端适配| 适配项 | 方案 || 分辨率适配 | Canvas Scaler 的 Reference Resolution 设为 480×270Match 0.5 || 安全区 | iPhone X 刘海屏Canvas 子节点加 SafeArea 组件自动偏移 || 宽高比差异 | 16:9 与 19.5:9 之间差异小480×270 设计区域居中两侧留黑或补背景 || 性能基准 | iPhone 6s / 骁龙 660 以上目标 60fps |7.3 触控交互世界空间点击Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position))UI 点击Unity 自带EventSystemIPointerClickHandler移动端自动兼容拖拽IDragHandler/IBeginDragHandler替换 PC 的OnMouseDrag长按手动计时 TouchPhase.Stationary 时长 ≥ 0.5s多点触控Ch3 光影拖拽可能需要用Input.touchCount 1处理7.4 移动端性能指标| 指标 | 上限 || Draw Call | 50 || 纹理内存 | 200MB || 顶点数 | 10K像素风天然低 || 纹理格式 | ASTC (iOS) / ETC2 (Android) || 后处理 | 关闭像素风无需 Bloom/Motion Blur |7.5 转场系统| faceNoise | 转场效果 | 含义 || 4~6 | 像素溶解 | 记忆破碎严重 || 2~3 | 模糊聚焦 | 记忆模糊但可追回 || 0~1 | 无过渡 | 记忆清晰直接跳转 |调用方式StartCoroutine(TransitionManager.Instance.GoToScene(Chapter_02));7.6 存档系统| 存档类型 | 文件名 | 用途 || 自动存档 | save_auto.json | 进入新场景自动触发 || 手动存档 | save.json | 玩家手动保存章节中特定点位 || 分支存档 | branch_xxx.json | 多结局重玩时保留不同分支 |7.7 场景命名规范Prologue_Hub ← 序章渡口合一Chapter_01 ← Ch1 失聪音乐家Chapter_02 ← Ch2 绝症少年Chapter_03 ← Ch3 公交车司机Chapter_04 ← Ch4 战地记者Chapter_05 ← Ch5 阿兹海默老人Chapter_06 ← Ch6 乡村教师Chapter_07 ← Ch7 摆渡人自渡八、测试计划8.1 PC Editor 阶段| 阶段 | 内容 | 通过标准 || 单元测试 | 每个章节场景独立 Play手动走完核心流程 | 无报错状态正确写入 GameManager || 集成测试 | 序章→Ch2→回Hub→Ch3连续切换场景 | 信物/名册/光点状态一致存档可读可写 || 全流程 | 7章 序章连续打通 | 无卡死所有结局可达 |8.2 移动端真机测试| 阶段 | 内容 | 通过标准 || 分辨率 | iPhone SE (4), iPhone 14 Pro (6.1), iPad (9.7) | Canvas 缩放正确无裁切/变形 || 触控 | 所有交互类型点击/拖拽/长按 | 无延迟多点触控无冲突 || 安全区 | iPhone X 刘海屏 | 按钮不被遮挡 || 性能 | Profiler 监控 | 稳定 60fpsDraw Call 50无 GC spike || 构建 | iOS Xcode Android Gradle | 构建无报错APK/IPA 可安装运行 |九、风险与对策| 风险 | 对策 || 14周完不成七章 | 第6周8月初检查如果跑通章节少于 4 章 → 启动 uni-app 备选方案 || 美术量太大~290张 | 代码阶段全用灰块代替美术集中到 9月画 || 像素溶解噪声图没素材 | 用 Unity 自带 Perlin Noise 生成或网上找免费噪声纹理 || GameManager DontDestroy 跳场景重复 | Awake 里已有判断确保每个场景只有一个 || 移动端触控输入未适配 | 8月 W1 集中替换所有Input.GetMouseButtonDown为Input.GetTouch|| iOS 审核被拒 | 剧情内容提前检查敏感词避免政治/宗教隐喻 || Android 碎片化适配 | 测试 3 款以上主流机型 限定最低 Android 8.0 |十一、备选方案uni-app如果 8月初第6周检查时主项目进度不达标少于 4 章完成技术方案| 项目 | 选择 || 框架 | uni-app Vue 3 || 平台 | 微信小程序iOS Android 基于此分发 || 内容形态 | 世界观展示 剧情文本 简易 H5 互动 |模块规划首页└── 六角色设定 概念图展示剧情页└── 每个角色故事文本版原游戏剧本改编互动页简易 H5└── 寻物图片热点点击└── 拼图CSS transform 格子拖拽└── 填色Canvas 色盘点击关于└── 开发者信息 跳转原项目链接*最后更新2025年6月24日*