我在 Unreal 中主导实现了 潜行警戒系统、镜子-灯光反射解谜、怀表/时钟时间解谜 三套核心机制,并把它们做成“可调参、可复用、易集成”的工程化系统,支撑团队快速迭代关卡与体验。
项目一句话
The Perfect Crime 是一款以“潜行 + 多阶段解谜”为核心的关卡原型:玩家需要躲避安保视野,在场景中利用光线反射与时间调节触发关键事件,并通过清晰的 UI 反馈与失败重置机制形成可学习的规则闭环。
我的职责(Gameplay Engineer)
我主要负责三套系统,并从 C++ 原型 → 关卡集成 → 试玩反馈迭代 → 末期 polish 全链路推进:
- Security Guard Vision / Stealth(安保视野与潜行)
- Mirror–Lamp Light Reflection Puzzle(镜子-灯光反射解谜)
- Pocket-Watch / Clock Time Puzzle(怀表/时钟时间解谜)
同时,我也承担了大量“集成后才会暴露”的问题修复:交互提示、输入手感、碰撞/朝向、渲染显示等。
核心系统亮点
- 可配置视野锥(Vision Cone)+ 扫描逻辑:角度 / 距离 / 扫描速度可调,带可视化调参辅助
- 检测计时器(Detection Timer):进入视野累积、超阈值触发失败与重置,形成可学习的潜行规则
- 镜面反射解谜工程化:镜子旋转 + 光线射线检测 + 命中判定 + 关卡可预测行为
- 把“手感”当作系统的一部分:从“狂点旋转”迭代到“按住旋转”,并调整起始角/旋转范围降低挫败
- 怀表解谜(时间记忆/目标时间/行动点扣除):内部时间状态、目标时间判定、操作扣 AP(Action Points)
- Blueprint 友好 API:把复杂逻辑封装成“能不能过关”的简单查询接口(例如是否停在目标时间)
- 分层架构:玩法逻辑在 World Actor(AActor),视觉与提示在 UI Widget(UUserWidget),接口清晰
- 团队协作可落地:提交到 P4(Perforce),附 demo 视频与使用说明,便于设计与技术美术接入
我具体做了什么(系统拆解)
1) 安保视野与潜行:SecurityScanner
- 用 C++ 实现安保“扇形视野锥”,支持扫描摆动(sweep),并暴露可调参数:
- 视野角度、距离、摆动速度
- 增加“检测计时器”:玩家在视野内停留过久触发失败,并执行 reset
- 增加可视化/调试显示:让设计同学能直接在关卡里看见视野范围并调整参数
价值:不仅“能用”,而且能被关卡设计快速复用与调参,减少反复改代码的沟通成本。
2) 镜子-灯光反射解谜:MirrorPuzzleActor
- 集成并优化镜子光源系统,使其在当前关卡中可用
- 调整光线射线逻辑与镜子旋转规则,让解法更“可预测”
- 解决试玩反馈中的关键体验问题:
- 需要旋转接近 360° 才能解谜 → 通过调整起始角/旋转范围降低操作负担
- 操作从“点按刷输入”逐步改为“按住旋转”,更符合玩家预期
价值:把“物理/射线类谜题”从演示版变成可交付的关卡玩法组件。
3) 怀表/时钟解谜:ClockWidget + 底层 C++ 系统
- C++ 设计并实现怀表解谜系统:
- 内部时间状态(memory)
- 目标时间检测(target-time checking)
- 调整指针时正确扣除行动点 AP(Action Points)
- 对上提供 Blueprint 友好接口:让设计侧能直接查询“是否到达目标时间”,无需自写时间逻辑
- 统一输入交互(贴合全局交互方案):
- A/D 调整当前指针
- E 切换指针
- F 退出交互
- 修复集成后的真实问题:交互提示不出现、指针渲染异常、怀表朝向/碰撞导致难以观察等
价值:把“一个谜题点”做成可复用的系统,并确保与 UI/交互规范一致。
工程与协作方式
- 端到端负责:不是交付一次代码就结束,而是持续跟进集成、试玩、修复与 polish
- 设计友好:接口清晰、调试可视化、参数可调
- 沟通与交付:P4 提交 + demo 视频 + 简短文档,保证队友能快速接入并继续做关卡
- 模块分层:Actor 负责玩法,Widget 负责 UI/反馈,减少耦合、利于扩展
技术栈
- Unreal Engine
- C++(核心系统与状态逻辑)
- Blueprint(关卡集成与事件驱动)
- UMG / UUserWidget(UI 反馈、提示、状态展示)
- Raycast / Trace(光线判定与交互检测)
- Perforce(团队协作与版本管理)
可量化的“结果”
- 关键玩法系统稳定集成到关卡,支持多轮试玩迭代
- 输入手感与可视化反馈改进后,解谜挫败感显著降低
- 通过封装 Blueprint API 与调试可视化,提高设计侧迭代速度
QA(TODO)
- 为什么把逻辑放 Actor、UI 放 Widget?接口怎么设计?
- Detection Timer 的阈值与重置策略如何避免“误判/误杀”?
- 光线反射如何保证可预测性?怎么避免浮点误差带来的边缘失败?
- 怀表系统如何处理多指针状态、AP 扣除与撤销?
- 如何与设计一起定义“旋转范围/起始角/输入方式”以控制难度?
链接
Demo下载:Sherlock Holmes: The Perfect Crime
