c3c10a9fcb
- game-reviewer: 删除本地审查记录,仅Issue评论 - quality-gate-review: 删除审查记录/步骤号/阶段标准 - game-dev: 删除阶段感知节,4个工作流详情拆到技能 - game-designer: 删除原型/批量生产阶段,执行案规范拆到技能 - game-pm: 去掉节号和步骤号 - 全局去掉步骤标号(①-⑧/步骤1-5/1.4.X/第一步-第四步) - 新建技能: code-implementation/deviation-report/design-execution - 原型目录扁平化: docs/design/prototype/* → docs/design/ - requirements-analysis及子文件去步骤号和阶段引用 - stage-iteration/sketch/roadmap去任务编号 - 更新所有docs/design/路径引用
12 KiB
12 KiB
角色控制执行案(v0.1 原型)
迭代记录
| 迭代版本 | 修改日期 | 状态 | 说明 |
|---|---|---|---|
| v0.1.0 | 2026-06-05 | 📝 设计中 | 初版执行案,覆盖 v0.1 角色移动、摄像机、跑步的完整行为规则 |
| v0.1.1 | 2026-06-05 | 📝 设计中 | 移除步行状态,仅保留跑步;修正摄像机与角色转身行为描述 |
状态标记:📝 设计中 | 🔄 开发中 | ✅ 已同步
系统概述
角色控制系统让玩家操控主角在千禧年城郊场景中自由移动。v0.1 原型实现:第三人称摄像机跟随、WASD 移动(跑步速度)、鼠标控制视角。
核心设计决定(已确认)
- 移动方向相对摄像机 — WASD/方向键的移动方向以当前摄像机朝向为基准。W 永远是摄像机看的方向,角色转身朝移动方向跑。因为角色转向速度远快于摄像机旋转速度,跑动中摄像机永远追不到角色正面——玩家始终看到角色背影。
- 仅跑步,无步行 — v0.1 只有一种移动速度(跑步速度),不需要 Shift 键切换。按移动键就是跑,松开就是停。
- 不实现蹲下和跳跃 — v0.1 场景设计保证所有区域跑步可达。
状态定义
角色控制系统维护两个状态:
| 状态 | 说明 |
|---|---|
| Idle | 静止站立,不接收移动输入或所有方向键已松开 |
| Running | 跑步中,速度 4.5 m/s(建议值,可调,范围 3.5-6.0 m/s) |
状态转换
Idle ──(按下移动键)──→ Running
Running ──(松开所有移动键)──→ Idle
交互进行中(交互系统处于 Interacting 状态)时,角色控制系统忽略所有移动输入,状态冻结为 Idle。
行为规则
一、摄像机系统
默认位置
- 距离:摄像机距角色约 3.5m(建议值,可调,范围 2.5-5.0m),沿摄像机当前偏航角的反方向偏移(即摄像机看的方向的反方向)
- 高度:摄像机位于角色头部上方约 0.8m(建议值,可调,范围 0.5-1.2m),相对角色位置
- 俯角:摄像机略微向下看向角色,约 15° 俯角(建议值,可调,范围 10°-25°)
- 效果:能看到角色全身及周围 2-3m 的环境
跟随规则
- 跟随目标:角色脚底中心点
- 跟随方式:软跟随,摄像机位置以一定延迟追踪角色位置,始终保持当前偏航角和俯角
- 跟随速度:摄像机从当前位置平滑移动到目标位置,速度为角色移动速度的 3-5 倍(建议值,可调,范围 2-8 倍)
- 效果:角色移动时摄像机不会 1:1 同步,有轻微的"拖拽感",让画面更柔和自然
视角旋转(鼠标)
- 水平旋转:鼠标左右移动 → 摄像机围绕角色水平旋转(偏航角),旋转速度约 150°/秒(建议值,可调,范围 90°-300°/秒)
- 垂直旋转:鼠标上下移动 → 摄像机围绕角色垂直旋转(俯仰角)
- 上限:最高可到水平线以上约 45°(建议值,可调,范围 30°-60°),不能再往上看到天空正上方
- 下限:最低可到水平线以下约 30°(建议值,可调,范围 20°-45°),不能再往下看到地面以下
- 旋转范围:水平方向无限制(可 360° 连续旋转),垂直方向限制在上下限之间
摄像机与角色移动的关系
摄像机角度决定移动方向,角色转向移动方向,二者形成以下行为:
- 站定时:摄像机可自由旋转到任何角度(包括角色正面),角色面朝方向不变
- 跑动中:角色转向速度(720°/秒)远快于摄像机旋转速度(150°/秒),因此角色始终比摄像机"先转到位"。玩家在跑动中旋转摄像机,角色的移动方向会跟着变(跑出弧线),但摄像机永远追不到角色正面——玩家始终看到角色背影
- 站定后转到正面再按 W:角色转身背对摄像机,朝摄像机看的方向跑。摄像机跟随角色前进,玩家看到的是角色背影
摄像机碰撞处理
- 碰撞规则:当摄像机目标位置与场景几何体(墙壁、柱子等)重叠时,摄像机自动向前拉近,紧贴碰撞面内侧
- 最小距离:摄像机距角色最近不低于 0.5m(建议值,可调,范围 0.3-1.0m),防止摄像机穿入角色身体内部
- 恢复:碰撞消除后(角色离开墙壁等),摄像机以软跟随速度平滑回到默认距离位置
- v0.1 简化:仅处理摄像机与静态场景几何体的碰撞,不处理与动态物体的碰撞
二、移动系统
移动方向
- 输入源:WASD 键或方向键
- 方向基准:当前摄像机的水平朝向(偏航角)
- W / ↑ = 摄像机看的方向(前方)
- S / ↓ = 摄像机看的反方向(后方)
- A / ← = 摄像机看的方向的左侧
- D / → = 摄像机看的方向的右侧
- 对角移动:同时按两个方向键(如 W+A)时,移动方向为两个方向的合成方向(45° 斜向),速度不叠加(斜向移动速度与正向相同)
- 连续旋转中移动:跑动中旋转摄像机,移动方向实时跟随摄像机朝向变化,角色平滑转向新的移动方向,跑出弧线轨迹
角色转向
- 角色静止(Idle)时,面朝方向不变,不随摄像机旋转而转身
- 角色移动(Running)时,角色面朝方向平滑转向移动方向:
- 转向速度约 720°/秒(建议值,可调,范围 360°-1080°/秒),远快于摄像机旋转速度(150°/秒)
- 转向采用最短路径旋转(不超过 180° 的方向选择较短弧线旋转)
- 转向期间角色持续移动(不"停顿再转向",而是"边跑边转")
- 结果:跑动中玩家始终看到角色背影,摄像机追不到角色正面
跑步
- 触发:按下任意移动键(WASD/方向键)
- 速度:4.5 m/s(建议值,可调,范围 3.5-6.0 m/s)
- 起步:从静止到跑步的加速时间约 0.2 秒(建议值,可调,范围 0.1-0.4 秒),不是瞬间达到全速
- 动画:v0.1 使用简单的占位跑步动画(若有);若无动画资源,角色在地面滑动也可接受
停止与减速
- 松开所有移动键:角色从跑步速度减速到静止,减速时间约 0.3 秒(建议值,可调,范围 0.2-0.5 秒)
- 效果:角色不会突然"钉"在地上,而是有自然的减速感
坡道与台阶
- 可通行坡度:角色可沿坡度 ≤ 45°(建议值,可调,范围 30°-60°)的斜面向上/下移动
- 超出坡度:角色无法攀爬超过最大坡度的斜面,在坡面底部停止移动(不滑落)
- 台阶:v0.1 场景中台阶高度不超过 0.15m(建议值,可调,范围 0.1-0.3m)时角色可直接跑上去,无需跳跃
- v0.1 简化:场景设计应避免需要跳跃或复杂攀爬的地形,所有可达区域通过跑步即可到达
三、输入映射
键鼠操作
| 操作 | 按键 | 说明 |
|---|---|---|
| 移动(跑步) | WASD / 方向键 | 方向相对摄像机朝向,按住就跑 |
| 视角旋转 | 鼠标移动 | 水平无限制,垂直有上下限 |
| 交互 | E | 委托交互系统处理 |
| 取消/返回 | ESC | 委托交互系统处理 |
| 切换交互物 | Tab / 鼠标滚轮 | 委托交互系统处理 |
输入优先级
- 交互系统处于 Interacting 状态时 → 移动键(WASD/方向键)的输入被忽略
- 交互系统处于 Free 状态时 → 所有输入正常响应
- 视角旋转(鼠标)不受交互状态影响,交互进行中仍可旋转视角(但摄像机可能被交互系统的推镜行为覆盖,见交互系统执行案)
边界情况处理
角色碰撞场景边界
- 场景边缘用物理碰撞体阻挡(围墙、建筑外墙、水塘碰撞面等)
- 角色跑到碰撞体时停止移动,不穿墙、不掉出场景
- 碰撞时角色保持 Idle 或贴墙滑行(沿碰撞面方向的分量仍可移动)
摄像机穿墙
- 摄像机碰撞处理见「摄像机碰撞处理」章节
- 若角色背靠墙壁(摄像机默认位置在墙内)→ 摄像机拉近到角色前方 0.5m 处
- 若角色在狭窄空间中(前后都有墙)→ 摄像机拉到最近的开放空间一侧
同时按多个方向键
- W+S 同时按:W 和 S 互为反向,抵消后角色不移动(或取最后按下的键方向,不叠加)
- W+A 同时按:按对角线方向移动,速度与正向相同
- W+A+S 同时按:W 与 S 抵消,仅 A 方向生效,角色向左移动
- 三个以上方向键同时按:遵循"对向抵消"规则
角色在交互中
- 交互系统进入 Interacting 状态 → 角色控制系统忽略所有移动输入
- 交互系统回到 Free 状态 → 角色控制系统恢复正常输入响应
- 交互期间摄像机由交互系统控制(推镜/回位),角色控制系统不更新摄像机位置
- 交互结束后摄像机回到角色控制系统的默认跟随位置(以角色当前位置为基准)
鼠标灵敏度极端值
- 鼠标灵敏度由引擎输入设置控制,不通过角色控制系统配置
- v0.1 使用默认灵敏度,不提供灵敏度调节选项
- 后续版本可在设置菜单中加入灵敏度滑块
跨系统交互
与交互系统的关系
- 输入互斥:交互系统处于 Interacting 状态时,角色控制系统忽略移动输入
- 角色转向委托:交互触发时(如观察、拾取),角色自动转向交互物的行为由交互系统控制,不由角色控制系统控制
- 摄像机控制权:交互进行中摄像机由交互系统控制(推镜/回位);交互结束后摄像机回到角色控制系统的默认跟随
- 状态信号:角色控制系统向交互系统提供「角色当前状态」(Idle/Running)和「角色位置」,交互系统用这些信息判断交互触发条件
与场景系统的关系
- 碰撞体:场景中的碰撞体决定角色的可通行区域,角色控制系统不定义碰撞,仅响应碰撞结果
- 地形设计约束:v0.1 场景设计确保所有可达区域无需跳跃或蹲下即可到达
- 出生点:角色初始位置在"家"门口,由场景系统定义出生点位置
v0.1 不实现清单
以下功能明确排除在 v0.1 之外:
| 功能 | 排除原因 |
|---|---|
| 步行 | v0.1 仅跑步,简化状态 |
| 蹲下 / 蹲伏移动 | v0.2+ 实现,v0.1 场景无蹲下专属内容 |
| 跳跃 | 不需要,场景设计保证跑步可达 |
| 攀爬 | 不需要 |
| 手柄适配 | v0.1 优先键鼠 |
| 体力 / 疲劳系统 | v0.1 跑步无限制 |
| 角色换装 / 自定义 | 后续版本 |
| 复杂动画系统 | v0.1 使用简单占位动画或无动画 |
| 存档 / 读档 | v0.1 不持久化 |
可调参数汇总
| 参数 | 建议值 | 可调范围 | 说明 |
|---|---|---|---|
| 摄像机默认距离 | 3.5m | 2.5-5.0m | 沿摄像机偏航角反方向 |
| 摄像机高度 | 0.8m | 0.5-1.2m | 角色头部上方 |
| 摄像机俯角 | 15° | 10°-25° | |
| 摄像机跟随速度倍率 | 3-5 倍 | 2-8 倍 | 相对角色移动速度 |
| 视角水平旋转速度 | 150°/秒 | 90°-300°/秒 | |
| 视角垂直上限 | +45° | +30° 至 +60° | 水平线以上 |
| 视角垂直下限 | -30° | -20° 至 -45° | 水平线以下 |
| 摄像机最小距离 | 0.5m | 0.3-1.0m | 碰撞拉近时 |
| 跑步速度 | 4.5 m/s | 3.5-6.0 m/s | v0.1 唯一移动速度 |
| 起步加速时间 | 0.2 秒 | 0.1-0.4 秒 | 静止到全速 |
| 停止减速时间 | 0.3 秒 | 0.2-0.5 秒 | 全速到静止 |
| 角色转向速度 | 720°/秒 | 360°-1080°/秒 | 移动时转向移动方向 |
| 可通行最大坡度 | 45° | 30°-60° | |
| 台阶最大高度 | 0.15m | 0.1-0.3m | 无需跳跃直接跑上 |