3D 叙事解谜 · Unity / C# · Technical Design
观看完整 PV · 实机视频与作品集 · 架构详解 · 版本证据
《时之舞者》围绕“与过去的自己协作”展开:玩家录制一段行动,返回起点,再部署具有物理交互能力的影子。影子沿记录重演,参与压力板、激光和谐振水晶,让玩家逐步从分工解谜走向同步共舞。
本仓库是项目的源码阅读与技术展示版:公开 76 份项目业务 C# 脚本、架构说明与精选代码差异,重点展示技术策划如何把体验目标转译为动作语义、回放管线和机关交互边界。
完整实机请从上方视频入口观看。场景、美术、音频、字体、第三方插件与原 Git 历史均未包含在本仓库中,因此本仓库不能直接作为完整 Unity 工程运行。公开范围
| 项目 | 内容 |
|---|---|
| 背景 | 2025 米哈游游戏策划大赛团队项目 |
| 本人职责 | 白糖 / Elysugar:主策划与技术策划,玩法及关卡设计、核心机制验证与部分 Gameplay 实现、协作对接 |
| 团队 | 白糖:主策 / 技术策划;呤幽:主美;grise0:程序 |
| 技术 | Unity 2022.3、C#、Rigidbody、FSM、Command、事件通知、DOTween |
| 内容 | 三个主要关卡;原始设计预算约 16 分钟 |
| 展示 | 作品集已有实机视频;代码核对与运行验证边界见验证记录 |
| 体验阶段 | 玩家在做什么 | 设计意图 |
|---|---|---|
| 异步协作 | 让影子占住机关,自己通过道路 | 理解“过去的行动可以帮助现在” |
| 掩护与节奏 | 利用影子和周期环境,安排通过时机 | 从使用工具转向依赖伙伴 |
| 同步共舞 | 与影子在同一区域完成关键动作 | 把时间协作转化为叙事高潮 |
以上是关卡组织与体验目标。既有实机负责展示实现表现;关于理解、失败归因和情绪体验的下一轮观察,见设计思考草案。
连续运动与瞬时动作有不同的含义。MoveCommand 保存速度、角速度、朝向与动画状态;ActionCommand 表达 Jump / Land 等离散动作。两者通过 ITimeBackCommand 进入同一个有序列表,影子顺序执行,遇到运动命令后等待下一次物理更新。
这让同步机关能够监听“跳跃发生了”,而不用把“角色正在空中”当成同一件事。新增动作时,可以沿动作类型、录制点、回放消费端逐步接入。
实现边界: 当前是运动状态重演与动作事件回放;没有逐帧位置纠偏,也没有独立动作时间戳调度器。
玩家执行动作时通知当前水晶;影子进入水晶区域后,水晶订阅影子的动作事件。双方动作发生时记录 Time.time,再比较时间差,成功后驱动机关与表现。
判定时机与动作语义直接对应,省去了为了同步判定而持续查询动作状态的需要。窗口也是关卡参数:脚本和 prefab 默认 0.2 秒,第三关四个场景水晶实际配置为 0.5 秒。
影子可能在仍踩着压力板、挡着激光时结束回放。CloneC.outCloneCheck() 在停用影子前遍历接触记录,为已知机关移除占用、恢复表现,并解除水晶动作订阅。
这个处理把“影子结束”与“世界恢复”连起来。当前采用直接组件分支,新增机关仍需要补充退出处理;它提供了具体恢复路径,完整中断覆盖见验证清单。
→ 影子生命周期
flowchart LR
P["Player / FSM"] -->|"FixedUpdate 运动采样"| M["MoveCommand"]
P -->|"动作发生"| A["ActionCommand"]
M --> Q["有序命令列表"]
A --> Q
Q --> R["TimeBackManager 顺序回放"]
R --> C["Clone / Rigidbody / Animator"]
P -->|"直接通知当前水晶"| H["HarmonicCrystal 时间差判定"]
C -->|"OnActionExecuted"| H
C -->|"碰撞与触发"| W["压力板 / 桥 / 激光"]
H -->|"机关事件与表现"| W
C -->|"退出前显式清理"| W
完整项目的场景编排使用 GameManager、关卡脚本和 EventCenter;角色行为通过 FSM 组织;回放控制集中在 TimeBackManager。运动命令负责恢复刚体状态,动作命令负责派发逻辑动作,具体交互效果由机关消费。
架构详解包含实际调用顺序、状态边界和扩展取舍。
Assets/Code/
├── Player/ 角色控制、状态机、动作通知
├── TimeBack/ 命令数据、录制、回放、影子退出
├── 交互物品/ 水晶、平台、压力板、桥梁、激光
├── Manager/ 场景、事件、音频、UI 管理
└── Editor/ 对话与文本相关编辑器工具
docs/ 架构、审阅证据、验证、设计思考、贡献说明
└── evidence/ 精选业务代码差异,不含原 Git 历史
- 先观看 PV 或作品集中的实机,理解“录制 → 部署 → 世界交互”。
- 阅读
TimeBackCommand.cs与TimeBackManager.cs,定位命令数据和回放顺序。 - 阅读
HarmonicCrystal.cs与CloneC.cs,追踪动作判定与退出清理。 - 对照架构文档和精选 diff,理解当前实现、演化入口与保留的取舍。
完整项目采用 Unity 2022.3;原工程审阅版本为 2022.3.62f1c1。公开脚本依赖 Unity API、DOTween、TextMesh Pro 等组件及场景绑定;这些依赖和资产没有打包为可运行工程。下表说明视频中的操作。
| 操作 | 输入 |
|---|---|
| 移动 / 跳跃 | WASD / Space |
| 交互 | F |
| 开始 / 停止录制 | Tab;录制上限 5 秒 |
| 部署影子 | E;录制结束后、影子未激活时 |
| 暂停 | Esc |
验证状态: 本轮在原工程中完成源码、场景配置与 Git 历史核对,并检查公开资料的链接和发布范围;未重新运行 Unity 构建或完整试玩。已有视频展示历史实机表现,未建立其与本次文档提交的精确版本映射。已知限制与待验证项
- 架构与技术决策:为什么这样表达运动、动作与退出。
- 版本证据:从实际 diff 追溯机制接入。
- 设计思考 · 待作者 Review:共舞、失败反馈与情绪递进。
- 验证记录:本次确认了什么,下一轮具体观察什么。
- 团队与资源说明:职责归属、来源与复用边界。
项目作为团队作品展示。第三方组件、字体、音频及美术资源各自保留其原有权利;本仓库未授予全工程统一的再分发许可。