作品集
Spiritual Well - 开拓芯参赛项目
项目类型:2D 平台跳跃 / 多角色解谜 / 团队项目
开发周期:2026 年 1 月 – 2026 年 5 月
开发环境:Unity、C#、2D Controller、Cinemachine、TextMesh Pro
演示视频:Bilibili - Spiritual Well
试玩链接:itch.io - Spiritual Well
项目简介
《Spiritual Well》是一款 2D 多角色平台解谜游戏。玩家需要在战士、盗贼、法师、弓箭手四名角色之间切换,利用各自能力通过平台、风场、机关和地形谜题。项目中我负责除压力板、门、管道、重力平台以外的主要程序相关内容。


我的职责
- 基于开源 2D Controller 接入并调整移动、跳跃、输入接收和角色控制逻辑,参与角色技能与核心玩法设计。
- 实现四名角色的差异化技能:战士背人并投掷、盗贼传送队友、法师无重力浮空 / 冰形态滑行、弓箭手射箭 / 收箭与灵犬跟随。
- 实现角色技能统一入口、角色切换、Cinemachine 跟随、队友碰撞忽略、死亡后自动切换存活角色等基础系统。
- 参与升降平台、风场等交互物实现,并负责美术资产导入、BGM、技能音效、UI 音效等音频接入。
核心亮点
- 多角色技能系统:用
CharacterAbilityRunner根据CharacterRoleTag分发左键技能,每个角色能力独立成组件,避免把所有技能堆进角色控制器。 - 战士投掷:
SoldierAbility支持检测附近队友 / NPC、背起目标、显示抛物线预览、松手投掷,并用ThrownState暂时让被投掷对象交给物理系统控制。 - 法师双形态:
MageController管理火 / 冰形态。火形态禁用下坠实现浮空,冰形态切换低摩擦材质与减速度实现滑行,同时保留被战士投掷和风场影响。 - 弓箭手与灵犬:
ArcherAbility实现蓄力、轨迹预览、直线射箭、插入物体和收箭;ArcherPassiveDog/SpiritDog让灵犬在箭和主人之间切换跟随目标。 - 小队控制与镜头:
CameraSwitchController只允许当前角色接收输入,切换时更新 Cinemachine 跟随目标,并处理死亡、被背起、弓箭蓄力等状态下的输入限制。
技术难点与解决方案
- 技能与基础控制器冲突:投掷、浮空、蓄力射箭都会影响移动输入或刚体速度。我通过
PlayerController.CanReceiveInput、ThrownState和角色能力组件,把“谁能控制角色”这件事集中判断。 - 战士投掷的物理接管:被背起时目标需要禁用物理并跟随战士,投掷瞬间又要恢复刚体并设置速度。实现中将背起、瞄准、投掷和落地恢复拆成不同状态,减少卡死和速度被覆盖的问题。
- 法师浮空与风场共存:火形态需要无重力,但仍要能被战士投掷和风场影响。处理方式是常态下清除下坠速度,被投掷时恢复参考重力,风场则直接修改最终速度。
- 多角色协作的边界状态:角色可能死亡、被背起、正在蓄力、被切换或通过检查点重置。我用相机切换、死亡处理和复活点系统统一刷新可控角色和队伍状态。
项目结果
- 完成四名角色的核心能力闭环,并支持角色切换、平台跳跃、投掷、传送、浮空、滑行、射箭、灵犬跟随等组合解谜玩法。
- 搭建了可复用的角色能力组件和小队控制逻辑,方便后续继续扩展新角色或新机关。
- 完成项目演示视频和 itch.io 试玩版本,能直接展示核心玩法与关卡流程。
相关链接
ELLA MASK - 2026 Global Game Jam 作品
项目类型:2D 平台跳跃 / 解谜 / Game Jam 项目
开发周期:48 小时
开发环境:Unity、C#、Cinemachine、TextMesh Pro、Twine/Twee
项目主题:Mask / 面具
演示视频:Bilibili - ELLA MASK
试玩链接:itch.io - ELLA MASK
项目简介
《ELLA MASK》是我参与 2026 Global Game Jam 时完成的 2D 平台跳跃解谜游戏。游戏围绕“戴上 / 摘下面具”设计核心机制:玩家可以在表世界与里世界之间切换,利用两套地形、障碍和通路的差异完成跑跳、躲避与解谜。

我的职责
- 负责核心玩法原型设计,将“面具”主题落到“表里世界切换”的可玩机制上。
- 负责 Unity 客户端主要功能实现:世界切换、场景流程、交互物、死亡复活、对话接入、视差背景和部分 UI/音频基础设施。
- 接入并调整 Tarodev 2D Controller,快速建立角色移动与跳跃手感。
- 实现 Twine/Twee 剧情文本导入链路,把策划文本转换为 Unity 运行时对话数据。
核心亮点
- 表里世界切换:同一场景内搭建上下两套地形,玩家切换时沿 Y 轴瞬移,并同步世界状态、Cinemachine、死亡检测和背景参考坐标。
- 稳定的关卡流程:用
SceneLoader统一处理淡入淡出、异步加载和切场景状态复位,减少 UI、输入和场景切换残留问题。 - 平台机关与死亡复活:实现移动平台、风场、地刺等交互物,并用
PlayerDeathHandler统一处理死亡、复活、速度清理和世界状态修正。 - 剧情快速接入:实现
TwineTweeImporter,支持 passage、分支链接和说话者信息解析,降低剧情文本接入 Unity 的成本。 - 无限视差背景:实现
ParallaxInfiniteLayer,根据相机宽度自动生成循环背景瓦片,并兼容世界切换时的整体瞬移。
技术难点与解决方案
- 世界切换同步:如果只移动玩家,镜头、背景、死亡检测和复活逻辑都会错位。我用世界状态管理器作为中心,并通过事件 / 接口通知相关系统同步修正。
- Jam 时间限制:48 小时内不能追求完整框架,所以我把流程、输入和常驻对象做成够用的基础设施,优先保证项目能稳定跑完。
- 移动平台手感:平台只移动自身会导致玩家滑落,因此在
PlatformMover2D中加入 carry 机制,让站在平台上的对象随平台同步位移。
项目结果
- 在 48 小时内完成了可试玩版本,包含开始界面、多个关卡、世界切换、平台跳跃、机关、死亡复活、剧情对话、音频和基础 UI。
- 成功将“面具”主题转化为可操作的核心机制,而不是只停留在视觉设定上。
- 项目发布了演示视频和 itch.io 试玩页面,可直接验证最终效果。
相关链接
- 演示视频:Bilibili - ELLA MASK
- 试玩页面:itch.io - ELLA MASK
- 项目复盘:GGJ 项目复盘
Moonbucks - Ludum Dare 59 Game Jam 作品
项目类型:调酒 / 排程 / 时间管理 / Game Jam 项目
开发环境:Unity、C#、TextMesh Pro、ScriptableObject
项目主题:Signal / 信号
游戏链接:Ludum Dare - Moonbucks
项目简介
《Moonbucks》是第 59 届 Ludum Dare Game Jam 作品。游戏设定为月球老板远程操控机器人经营酒馆,玩家需要读懂客人的需求信号,把材料、扫把、补货等动作提前排进 7 个执行槽;点击运行后,机器人会按队列顺序自动执行,玩家不能中途修改。

我的职责
- 负责核心玩法设计,将“信号”主题转化为“读懂客人需求 + 远程排程执行”的玩法循环。
- 负责 Unity 客户端主要功能实现:执行槽、材料拖拽、配方结算、需求生成、截止时间、分数和游戏结束流程。
- 实现客人需求与饮品配方系统,使用
DrinkRecipe/IngredientData管理饮品步骤和提示文本。 - 负责 HUD 反馈,包括需求倒计时、分数变化、客人反馈和运行阶段的视觉提示。
核心亮点
- 执行队列玩法:玩家在编辑阶段规划 7 个槽位,运行后队列自动执行,形成“计划 -> 执行 -> 承担结果”的核心循环。
- 需求对象建模:将客人需求从简单时间数组升级为
ActiveNeed对象,记录类型、目标、截止时间、完成状态和失败状态,避免重复结算。 - 基于执行成本的截止时间:不再单纯随机生成限制时间,而是按饮品材料耗时、清理耗时和队列顺序推算可完成时间,再附加缓冲。
- 配方与对话联动:
DrinkRecipe定义饮品材料顺序,DialogueGenerator根据材料生成客人台词,让玩家从表达中解析真正需求。 - Prefab / 场景配置回归:后期将部分运行时生成逻辑改回 Unity 场景和 Prefab 配置,降低集中控制器带来的维护成本。
技术难点与解决方案
- 排程结算复杂:材料、扫把、补货、酒杯和需求超时都在同一执行队列里结算。我用
BartendingMiniGameController管理 Start/Edit/Running/GameOver 状态,并在每个槽位执行后统一检查需求状态。 - 时间限制不公平:早期随机截止时间可能导致任务理论上无法完成。后续改为根据需求执行成本计算预计完成时间,再生成截止时间。
- 需求状态不够表达业务:只记录限制时间无法处理完成、失败、清理需求和客人反馈。我改为完整需求对象,只对未完成且未失败的需求进行超时扣分。
- AI 生成代码偏离 Unity 工作流:早期实现过度依赖集中控制器和运行时生成对象。后续手动拆分预制体和场景结构,让脚本更多负责规则,表现对象回到 Inspector / Prefab 配置。
项目结果
- 完成了一个可玩的调酒排程游戏闭环,包含客人生成、需求解析、槽位排程、材料消耗、饮品合成、清理、补货、计分和失败流程。
- 将“信号”主题同时落在玩法和叙事上:玩家解析客人的需求信号,老板通过远程信号操控机器人。
- 通过这次项目总结出更清晰的 Unity Jam 工作流:先明确场景对象、Prefab 和组件边界,再让 AI 辅助补充脚本。
相关链接
- 游戏页面:Ludum Dare - Moonbucks
- 项目复盘:Ludum Dare Game Jam 复盘