个人开发文档
2026/6/30 5:38:02 网站建设 项目流程

《渡》开发文档

一款像素风叙事解谜手游。玩家扮演摆渡人,引导六位逝者完成未了心愿,在莫比乌斯环式的叙事中,最终完成摆渡人的自我救赎。

项目信息
引擎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 核心架构决策

决策理由
单例 GameManager(DontDestroyOnLoad)跨场景全局状态管理,存档/读档/章节解锁全部由单点控制
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 出现交名册 + 翻名册引导 + 像素对话框1
Ch1 失聪音乐家色盘填色1
Ch2 绝症少年病房寻物 + 六物成镜1
Ch3 公交车司机光影气泡拖拽1
Ch4 战地记者照片取舍3
Ch5 阿兹海默老人拼图 × 遗忘机制3
Ch6 乡村教师一轴一格时间轴归位1
Ch7 摆渡人自渡逆流而上 + B 渡 A1

3.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.json

6.3 回渡口后的状态同步

Prologue_Hub 的Start()读取GameManager.Instance.chapterStates

  • chapterStates["Ch2"] == true→ 信物上柱、名册第三页解锁、对应光点点亮
  • chapterStates["Ch1"] == true→ 同理(序章完成后解锁第二页)
  • 重玩模式:已解锁章节可重复进入,不覆盖已有存档(分支存档 branch_xxx.json)

6.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×270,Match 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 自带EventSystem+IPointerClickHandler,移动端自动兼容
  • 拖拽: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 监控 | 稳定 60fps,Draw 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.GetMouseButtonDownInput.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日*

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询