Files
ChildHood/docs/design/玩家控制器-执行案.md
T
starmen1265 c3c10a9fcb refactor(skills): Agent架构重构——去阶段/去步骤号/审查纯Issue化/工作流拆技能/目录扁平化
- 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/路径引用
2026-06-08 16:03:24 +08:00

12 KiB
Raw Blame History

角色控制执行案(v0.1 原型)

迭代记录

迭代版本 修改日期 状态 说明
v0.1.0 2026-06-05 📝 设计中 初版执行案,覆盖 v0.1 角色移动、摄像机、跑步的完整行为规则
v0.1.1 2026-06-05 📝 设计中 移除步行状态,仅保留跑步;修正摄像机与角色转身行为描述

状态标记:📝 设计中 | 🔄 开发中 | ✅ 已同步


系统概述

角色控制系统让玩家操控主角在千禧年城郊场景中自由移动。v0.1 原型实现:第三人称摄像机跟随、WASD 移动(跑步速度)、鼠标控制视角。

核心设计决定(已确认)

  1. 移动方向相对摄像机 — WASD/方向键的移动方向以当前摄像机朝向为基准。W 永远是摄像机看的方向,角色转身朝移动方向跑。因为角色转向速度远快于摄像机旋转速度,跑动中摄像机永远追不到角色正面——玩家始终看到角色背影。
  2. 仅跑步,无步行 — v0.1 只有一种移动速度(跑步速度),不需要 Shift 键切换。按移动键就是跑,松开就是停。
  3. 不实现蹲下和跳跃 — 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 无需跳跃直接跑上