docs(design): 添加游戏愿景、系统设计与v0.1范围文档

新增: game-vision.md, v01-scope.md, brainstorm 记录,
player-controller/interaction-system/collection-system 设计,
scene-v01-suburban 场景设计
更新: CLAUDE.md 协作规范, style-guide 时代设定,
current.md/roadmap.md 进度追踪, design 命令模板
This commit is contained in:
2026-06-01 00:54:58 +08:00
parent b73a3ef098
commit 887b6e4485
12 changed files with 1444 additions and 36 deletions
+204
View File
@@ -0,0 +1,204 @@
# 收集系统 — 设计文档
> 对应版本:v0.1(基础拾取)→ v0.4(完整系统)→ v1.0(全量内容)
> 讨论来源:brainstorm-2026-06-01
---
## 设计目标
收集系统是游戏的**情感锚点**。它不是普通的"集齐图鉴"玩法,而是一个帮玩家**补全当年遗憾**的系统——有人当年没集齐水浒卡,有人集齐了但弄丢了。游戏给他们一个"圆满"的机会。
---
## 核心原则
1. **还原感**:每件收集品都是真实存在过的东西,玩家看到会说"我也有过!"
2. **补全遗憾**:不是从零开始的收集,而是帮你"找回"丢失的记忆
3. **多重价值**:收集品同时是玩具、是解锁钥匙、也是回忆载体
4. **世界回应**:收集成就会被世界认可——NPC 会讨论、会给称号、会改变称呼
---
## 收集品分类体系
### 第一类:普通玩具
**收集逻辑**:拿到一个就算完成,重在"拥有过"。
| 举例 | 说明 |
|------|------|
| 溜溜球 | 拿到一个溜溜球即完成 |
| 陀螺 | 拿到一个陀螺即完成 |
| 弹弓 | 拿到一个弹弓即完成 |
| 荧光手表 | 拿到即完成 |
**设计意图**:快节奏的小成就,让玩家早期就能体验到"收集到了"的满足感。
### 第二类:带收集属性的玩具
**收集逻辑**:同一种玩具有多个变体,需要集齐全套。这些物品本身也是小游戏的核心道具。
| 收集套组 | 变体说明 | 获取方式 |
|----------|----------|----------|
| 弹珠 | 不同花色/材质(猫眼、透明、彩纹……) | 赢弹珠比赛、场景拾取 |
| 洋画/卡片 | 水浒卡108将、三国卡、数码宝贝贴纸 | 买零食开包装、和小伙伴交换 |
| 四驱车零件 | 不同马达、轮胎、底盘(用于四驱车改装) | 小卖部购买、比赛奖励 |
**设计意图**:深度收集的核心——多变体、有稀有度、有获取挑战。同时直接关联小游戏玩法(弹珠比赛用弹珠、拍洋画用卡片)。
### 第三类:纯收集品
**收集逻辑**:主要过程在于"收集"本身,这些物品通常不能拿来玩,或者主要不是用来玩的。
| 收集套组 | 变体说明 | 获取方式 |
|----------|----------|----------|
| 糖果纸 | 不同品牌/款式的糖果包装纸 | 吃糖果获得、场景拾取 |
| 昆虫 | 不同种类的昆虫(知了、蜻蜓、瓢虫……) | 特定地点和时间捕捉 |
| 声音 | 环境中录下的声音(蝉鸣、卖豆腐的喇叭、电视广告) | 特定场景触发录制 |
**设计意图**:收集过程本身就是体验。捉虫要有地点和时间的探索感,录声音要有"等待那个瞬间"的仪式感。
### 第四类:时代特色物品
**收集逻辑**:触发动机是时代共鸣——"我吃过这个!""我见过这个!"
| 举例 | 说明 |
|------|------|
| 长鼻王 | 时代经典零食 |
| 无花果丝 | 那个味道忘不了 |
| 大大泡泡糖 | 里面有纹身贴纸 |
| 小浣熊干脆面 | 集卡就是从这开始的 |
| 健力宝罐 | 国民饮料 |
**设计意图**:这类物品是"时代博物馆"的展品。每件物品的图鉴描述要写得像一段回忆,让玩家被击中。
---
## 获取方式设计
每种收集品有符合现实逻辑的获取途径:
| 获取方式 | 对应收集品 | 说明 |
|----------|-----------|------|
| **买零食开包装** | 卡片、贴纸 | 在小卖部买干脆面/泡泡糖,开包装出随机卡片 |
| **赢小游戏** | 弹珠、部分卡片 | 和 NPC 玩弹珠赢了拿走弹珠,拍洋画赢了拿卡片 |
| **场景拾取** | 糖果纸、小物件 | 散落在场景中,探索发现 |
| **特定地点捕捉** | 昆虫 | 在水塘边、草丛、树下等特定位置,有时间限制 |
| **场景触发录制** | 声音 | 在特定场景等待/触发特定事件 |
| **NPC 交换** | 各种 | 和小伙伴交换重复的卡片、用收集品换新东西 |
| **剧情奖励** | 特殊物品 | 完成某个故事事件后获得 |
---
## 展示系统
### 收集图鉴界面
- 专门的收集展示界面,按四大分类组织
- 每件物品有:3D 模型展示 + 时代背景描述 + 主角内心独白
- 进度可视化(已收集/总数)
### 收集完成的特殊展示
- 当某一套收集品集齐时,图鉴页有特殊的视觉效果(比如页面变金色、播放一段回忆动画)
- **如果所有收集品全部集齐**:收集系统/界面本身成为游戏场景的一部分——可能是主角房间里多了一个展示柜,或者其他形式的物理化呈现
---
## 世界反馈机制
收集不仅是系统内部的进度,**游戏世界会回应玩家的收集成就**:
### NPC 反应
| 触发条件 | NPC 反应 |
|----------|----------|
| 集齐某套卡片 | 小伙伴聊天时提到"听说谁谁谁集齐了水浒卡,太厉害了" |
| 集齐弹珠 | 小伙伴来找你比弹珠的频率增加 |
| 完成某个收集里程碑 | 获得新称号,NPC 以后用新称呼叫你 |
### 称号系统
- 收集成就会解锁称号(如"卡片大师"、"弹珠王"、"百科全书")
- 称号不只是 UI 展示,NPC 会实际在对话中使用
- 不同 NPC 可能给你不同的称号(小伙伴叫你"弹珠王",妈妈叫你"小 collector")
---
## 剧情触发
- 集齐特定收集品会触发**支线剧情**
- 这些剧情是额外的故事片段,**不影响主线**
- 举例:集齐某套卡片后,NPC 大孩子来找你交换/挑战,引出一段关于那个年代集卡热潮的回忆
---
## 与其他系统的关联
```
收集系统 ←→ 小游戏系统
├── 弹珠(收集品)→ 弹珠比赛(小游戏)
├── 卡片(收集品)→ 拍洋画(小游戏)
└── 四驱车零件(收集品)→ 四驱车竞速(小游戏)
收集系统 ←→ 探索系统
├── 场景拾取 → 自由探索
├── 昆虫捕捉 → 特定地点/时间探索
└── 声音录制 → 环境互动
收集系统 ←→ NPC/社交系统
├── NPC 称号和称呼变化
├── NPC 交换机制
└── NPC 对收集成就的讨论
收集系统 ←→ 叙事系统
├── 物品图鉴中的回忆文字
└── 集齐触发的支线剧情
```
---
## 各版本范围
### v0.1 — 基础拾取
- 10 个可拾取物品(弹珠、糖果纸、橡皮擦等简单物品)
- 简单的收集计数(拾取后计数字 +1)
- 无分类、无图鉴 UI、无世界反馈
### v0.2 — 收集基础框架
- 引入四类收集品分类
- 基础图鉴 UI
- 收集品与小游戏关联(弹珠比赛得弹珠)
- 部分收集品可通过小游戏获取
### v0.3 — 收集与时间
- 时间相关的收集品(特定时间出现的昆虫)
- NPC 基础交换
- 声音录制初步
### v0.4 — 完整收集系统
- 完整图鉴界面(含 3D 展示和叙事文字)
- NPC 称号系统
- 收集完成的世界反馈
- 集齐触发的支线剧情
- 全部收集完的特殊展示
### v1.0 — 全量内容
- 所有收集品内容填充完毕
- 全套收集品平衡和稀有度调整
- 收集系统物理化展示(主角房间展示柜等)
---
## 设计要点备忘
- 收集品数量要合理——太多会变成苦差事,太少没有收集的乐趣
- 稀有度设计要有梯度——常见品容易获得给正反馈,稀有品需要努力才有成就感
- 不要让收集变成强迫——玩家不收集也能通关,收集是自愿的、有乐趣的
- 每件物品的文案要花心思——这是"被击中"瞬间的主要来源之一
+237
View File
@@ -0,0 +1,237 @@
# 环境交互系统 — 设计文档
> 对应程序实现:交互组件基类、交互检测、UI 提示系统
---
## 设计目标
让玩家通过"触碰"来感知这个世界——每一个可交互的物体都是一段记忆的入口。交互系统是 v0.1 的核心体验,它决定了玩家能否真正"活"在这个场景中。
---
## 交互类型
### 1. 观察(Examine) — 最核心的交互
**用途**: 查看物品或场景,触发主角的内心独白
**表现**:
- 角色走近物品,按交互键
- 屏幕底部或侧面浮现一段文字(主角的内心独白)
- 文字打字机效果逐字出现,按任意键加速/跳过
- 不进入独立界面,在场景中原地显示
**文案风格示例**:
```
[旧冰箱]
夏天的时候最期待打开冰箱的那一刻。
冰棒、西瓜、偶尔还有一瓶健力宝。
现在想起来,那个冰箱的嗡嗡声好像还在耳边。
[墙上的涂鸦]
不知道是谁画的,但画得还挺像奥特曼的。
我以前也想在墙上画,被我妈追着打了半条街。
[地上的弹珠]
一颗彩色花纹的弹珠,大概是哪个小孩掉的。
我以前也丢过最喜欢的那颗,找了整个下午都没找到。
```
**设计原则**:
- 每个观察文本都是一个独立的"微叙事"
- 文字简短(2-4句),不冗长
- 带有情感但不矫情
- 用孩子的视角看世界,不是大人回望
### 2. 拾取(Pick Up)
**用途**: 收集场景中散落的小物品
**表现**:
- 靠近地面上的可拾取物品(发光或微光提示)
- 按交互键,角色弯腰拾取动画
- 屏幕右上角弹出物品获得提示(图标 + 名称,1.5秒后消失)
- 物品自动进入背包/收集列表
**v0.1 可拾取物品**:
- 弹珠(不同花色)
- 小石子
- 橡皮擦
- 糖纸
- 水浒卡碎片
### 3. 操作(Operate)
**用途**: 与场景设施或大型物体交互
**操作类型**:
| 操作 | 表现 | 示例 |
|------|------|------|
| 开门/关门 | 角色推门动画,门物理旋转 | 家的门、小卖部的门 |
| 翻找 | 角色弯腰/伸手动画 | 翻抽屉、翻纸箱 |
| 使用设施 | 角色走到设施前触发 | 按公用电话、开水龙头 |
**v0.1 操作交互对象**:
- 家的门(进出)
- 小卖部门(进出)
- 公用电话亭(观察 + 对话文本)
- 水塘边的石头(可以打水漂?v0.2)
### 4. 对话(Talk) — v0.1 简化版
**用途**: 与场景中的 NPC 交谈
**v0.1 简化方案**:
- v0.1 不实现完整对话系统
- NPC 以"观察"方式交互——走近 NPC 显示一段对话/描述
- 例如:走近小卖部老板 → 显示"老板正在柜台后面打瞌睡,电视里放着还珠格格。"
- 后续版本再加入对话树和分支
---
## 交互提示 UI
### 触发规则
- 角色进入可交互物体的**触发半径**(默认1.5m)时显示提示
- 角色离开触发半径时提示消失
- 多个物体在范围内时,只显示最近的那个
### 提示样式
```
┌─────────────────────────┐
│ [E] 查看旧冰箱 │
└─────────────────────────┘
```
- 位置:物体上方偏移(屏幕空间投影)
- 字体:简洁的中文字体,白色带轻微描边
- 图标:交互键(E)+ 动作词(查看/拾取/打开)
- 过渡:淡入淡出(0.2秒)
### 交互类型图标
| 类型 | 图标文字 | 颜色 |
|------|----------|------|
| 观察 | 🔍 查看 | 白色 |
| 拾取 | ✋ 拾取 | 黄色 |
| 操作 | 🖐 打开 | 白色 |
---
## 交互后的叙事文本 UI
### 显示位置
- 屏幕下方居中,半透明背景条
- 不遮挡主视角
### 样式
```
╭──────────────────────────────────────────╮
│ │
│ 夏天的时候最期待打开冰箱的那一刻。 │
│ 冰棒、西瓜、偶尔还有一瓶健力宝。 │
│ │
│ [E] 关闭 │
╰──────────────────────────────────────────╯
```
- 背景:半透明黑色(透明度约60%)
- 文字:白色,逐字出现(打字机效果,每字约0.05秒)
- 按 E 或 ESC 关闭文本
- 文本显示期间角色可以缓慢移动(不硬锁定)
---
## 交互对象数据结构
每个可交互物体需要以下信息:
```json
{
"id": "fridge_home",
"name": "旧冰箱",
"type": "examine",
"triggerRadius": 1.5,
"interactText": "查看旧冰箱",
"narrativeText": [
"夏天的时候最期待打开冰箱的那一刻。",
"冰棒、西瓜、偶尔还有一瓶健力宝。",
"现在想起来,那个冰箱的嗡嗡声好像还在耳边。"
],
"oneShot": false
}
```
- `oneShot: true` 表示只触发一次(如拾取物品、一次性事件)
- `oneShot: false` 表示可反复交互(如观察类),但文本可以随机变化
---
## v0.1 交互对象清单
按场景区域划分(配合 scene-v01-suburban.md):
### 家
| ID | 名称 | 类型 | 描述 |
|---|---|---|---|
| fridge_home | 旧冰箱 | 观察 | 夏天的冰箱记忆 |
| tv_home | 老式电视 | 观察 | 大脑袋电视,天线要调 |
| bed_home | 我的床 | 观察 | 床底下的宝藏箱 |
| desk_home | 书桌 | 观察 | 没写完的暑假作业 |
| calendar_home | 日历 | 观察 | 圈着"开学的日期",被划掉了又画上 |
### 小卖部
| ID | 名称 | 类型 | 描述 |
|---|---|---|---|
| door_shop | 小卖部门 | 操作 | 进出小卖部 |
| shelf_snack | 零食货架 | 观察 | 辣条、泡泡糖、干脆面…… |
| shelf_drink | 冰柜 | 观察 | 健力宝、北冰洋、袋装冰 |
| owner_shop | 老板 | 观察(NPC) | 打瞌睡的老板和电视声 |
| card_rack | 卡片架 | 观察 | 水浒卡、数码宝贝卡片 |
### 街道
| ID | 名称 | 类型 | 描述 |
|---|---|---|---|
| phone_booth | 公用电话亭 | 观察 | IC卡电话的回忆 |
| bike_street | 老式自行车 | 观察 | 爸爸的永久牌 |
| laundry | 晾衣杆 | 观察 | 满院子飘着的衣服 |
| wall_graffiti | 墙上的涂鸦 | 观察 | 不知谁画的奥特曼 |
| manhole | 下水道盖 | 观察 | 弹珠掉进去的声音 |
### 空地
| ID | 名称 | 类型 | 描述 |
|---|---|---|---|
| ground_marble | 散落的弹珠 | 拾取 | 彩色花纹弹珠 |
| ground_card | 水浒卡碎片 | 拾取 | 被踩脏的卡片 |
| ground_stone | 小石子 | 拾取 | 打水漂用的石头 |
| tree_empty | 大树 | 观察 | 爬不上去的梧桐树 |
| puddle | 水坑 | 观察 | 昨天下的雨还没干 |
### 巷子
| ID | 名称 | 类型 | 描述 |
|---|---|---|---|
| cat_alley | 流浪猫 | 观察 | 巷子深处的猫 |
| window_alley | 老窗户 | 观察 | 窗台上的花盆 |
| box_alley | 废纸箱 | 操作(翻找) | 可能藏着好东西 |
| spider_alley | 蜘蛛网 | 观察 | 角落里的蛛网 |
### 水塘边
| ID | 名称 | 类型 | 描述 |
|---|---|---|---|
| pond_edge | 水塘 | 观察 | 水面倒映着天空 |
| frog_pond | 青蛙 | 观察 | 荷叶上的青蛙 |
| reed_pond | 芦苇 | 观察 | 风吹过的沙沙声 |
| ground_wrapper | 糖纸 | 拾取 | 彩色的糖纸 |
| ground_eraser | 橡皮擦 | 拾取 | 用了一半的橡皮 |
---
## v0.1 不包含
- 对话树 / 对话分支系统
- 物品背包 UI(物品拾取后只计入收集计数)
- 物品使用/组合系统
- NPC AI(NPC 为静态站位)
- 交互对象的动画变化(如开门后门保持打开)
- 时间相关的交互变化
+130
View File
@@ -0,0 +1,130 @@
# 玩家角色控制 — 设计文档
> 对应程序实现:角色控制器、摄像机系统、动画蓝图
---
## 设计目标
让玩家"成为那个男孩"——操作直觉、移动流畅,通过简单的操控就能沉浸在城郊场景的漫游中。控制器不应成为体验的障碍。
---
## 视角设计
### 摄像机:第三人称跟随
- **风格参考**: 《我的暑假》的观察距离——不远不近,能看到角色全身和周围环境
- **默认距离**: 角色身后约3-4米,略高于角色头部(约15°俯角)
- **镜头特点**:
- 跟随平顺,有轻微延迟(软跟随,不生硬锁定)
- 角色转身时镜头平滑过渡
- 靠墙时镜头自动拉近,避免穿墙
### 操作方式
| 操作 | 手柄(默认) | 键鼠 |
|------|-------------|------|
| 移动 | 左摇杆 | WASD |
| 视角 | 右摇杆 | 鼠标移动 |
| 跑步 | 按住左摇杆 / R1 | 按住 Shift |
| 蹲下 | R3 / ○ | 按住 Ctrl |
| 交互 | △ / A | E |
| 取消/返回 | ○ / B | ESC |
> 注:优先适配键鼠操作,手柄映射作为后续优化。
---
## 移动系统
### 步行(默认)
- **速度**: 正常散步节奏,约 2.5 m/s
- **用途**: 探索、观察环境、接近可交互物体
- **特征**: 步行动画自然,有轻微的左右摇摆
### 跑步
- **速度**: 约步行速度的 1.8 倍(约 4.5 m/s)
- **触发**: 按住跑步键 + 移动方向
- **体力**: v0.1 不做体力限制,后续版本可考虑加入(跑累了会喘气减速)
- **特征**: 跑步时有明显的加速过渡,停下时有减速惯性
### 蹲下
- **速度**: 约步行的 0.5 倍
- **用途**:
- 探索低矮空间(桌底、床底、矮灌木丛)
- 悄悄靠近(捉虫、捉迷藏)
- 查看地面上的小东西
- **特征**: 蹲下后视角自动降低,能看到平时忽略的细节
### 转身与停止
- 转身有动画过渡,不瞬移
- 停止时有惯性减速(约0.2秒),不会突兀地定住
- 急停时有一小步调整动画
---
## 交互触发方式
### 靠近触发
- 当角色接近可交互物体(约1.5米)时,屏幕显示交互提示
- 提示样式:物体上方出现简洁的图标 + 文字(如"🔍 查看冰箱")
- 多个可交互物体时,优先显示最近的
- 玩家按交互键执行
### 交互锁定
- 交互中角色自动面朝物体
- 交互动画播放期间,移动输入被短暂抑制
- 可通过取消键提前退出交互
---
## 动画需求清单
### 基础移动动画
| 动画 | 优先级 | 说明 |
|------|--------|------|
| Idle(待机) | P0 | 自然站立,有呼吸起伏和偶尔的小动作 |
| Walk(步行) | P0 | 4方向或8方向步行循环 |
| Run(跑步) | P0 | 跑步循环,起步和停止有过渡 |
| Crouch Idle(蹲伏待机) | P1 | 蹲下时的待机姿势 |
| Crouch Walk(蹲伏移动) | P1 | 蹲下时的缓慢移动 |
### 交互动画
| 动画 | 优先级 | 说明 |
|------|--------|------|
| Pick Up(拾取) | P0 | 弯腰捡起地面物品 |
| Open Door(开门) | P1 | 推门/拉门动作 |
| Open Drawer(翻抽屉) | P2 | 拉开抽屉查看 |
| Examine(端详) | P1 | 拿起物品在手中翻转查看 |
### 过渡动画
| 动画 | 优先级 | 说明 |
|------|--------|------|
| Walk ↔ Run 过渡 | P0 | 步行与跑步之间的平滑混合 |
| Stand ↔ Crouch 过渡 | P1 | 站立与蹲下之间的过渡 |
| Stop(急停) | P1 | 从移动状态停止的过渡 |
---
## v0.1 最小可行范围
v0.1 只需实现以下核心操控:
### 必做(P0)
- [x] 第三人称摄像机跟随
- [x] WASD 步行移动
- [x] Shift 跑步(速度切换,无体力限制)
- [x] 靠近物体显示交互提示
- [x] E 键交互(拾取地面物品)
### 可以简化
- 蹲下系统 → v0.2 再实现
- 动画可以用简单的占位动画
- 摄像机碰撞处理可以简化
### 不做
- 体力系统
- 攀爬/跳跃
- 手柄适配(v0.1 优先键鼠)
- 角色换装/自定义