Emotion Mask

项目案例

Emotion Mask

一款围绕情绪状态机、平台显隐、冲刺破坏、碎片收集和计时结算展开的 2D 平台跳跃解谜游戏,48 小时内独立完成并上线 TapTap。

独立开发策划程序UnityC#Game Jam
开发时间
2026.1
48h
团队规模
独立开发
我的角色
独立全栈开发 / 策划 / 程序 / 像素美术 / 音乐
开发平台
Windows / TapTap
使用技术
Unity / C#

单人完成并上架 TapTap,商店评分 9.4。

项目简介

《Emotion Mask》是一款以“情绪切换”为核心机制的 2D 平台跳跃解谜游戏,也是我在 Global Game Jam 2026 中独立完成的作品。游戏围绕当年主题“Mask”展开:玩家操控一位戴着空白面具的少年,在破碎的内心世界中切换“平静”“快乐”“愤怒”三种情绪状态,用不同能力观察道路、跨越障碍、粉碎阻挡,并收集散落的情绪碎片。

这个项目后来发布到了 TapTap。它对我来说不只是一次 Game Jam 练习,也是第一次把一个从概念、玩法、关卡到发布页面都完整走完的小型公开展示流程。当前公开成果以 Jam 版本、TapTap 页面、Global Game Jam 页面和演示视频为准;后续计划里的手感、教学和新面具内容仍然是下一阶段验证目标。

核心玩法

游戏把“面具”设计成角色能力与关卡解法之间的转换器。每一种情绪不是单纯换皮,而是对应一套操作手感和环境反馈。

  • 平静:看破隐藏路径和线索,帮助玩家理解关卡结构。
  • 快乐:提升跳跃高度与移动轻盈感,用更强的机动性跨越平台。
  • 愤怒:获得冲刺和破坏能力,撞开阻碍路线的障碍。

关卡设计的重点是让玩家意识到:真正的解法不是一直维持某种强能力,而是在不同情绪之间切换,选择当下最合适的状态。

截图与机制展示

平静面具下可见的平台

平静状态下,部分隐藏平台会被显示出来,玩家可以通过观察来找到更安全的路线。

快乐面具下平台不可见

切换到快乐状态后,同一位置的平台不再可见,但角色获得更快的移动节奏。这个对比体现了项目的核心设计:状态不是单纯增益,而是会改变关卡读取方式。

关卡中的平台跳跃与状态切换

关卡中把尖刺、墙面、移动平台和面具状态组合在一起,让玩家在操作和判断之间持续切换。

面具切换教学区域

教学区域用大字提示三种面具的能力差异:平静可看见移动平台,快乐速度更快,愤怒可以破坏障碍。

主题表达

《Emotion Mask》的叙事核心是“接纳不同情绪,才可能靠近完整的自我”。平静、快乐和愤怒都不是绝对正确或错误的状态,它们分别承担观察、行动和突破的功能。玩家在不断切换面具的过程中,也是在重新理解自己与世界的关系。

因此,面具既是玩法工具,也是情绪外化的符号。它把抽象的心理状态变成了可操作、可失败、可重新尝试的游戏机制。

我负责的部分

  • 独立完成玩法策划、程序开发、关卡设计、像素美术整合、音频整合、构建发布和商店页整理。
  • 设计三种情绪面具的能力差异,并把状态切换接入移动速度、跳跃、二段跳、贴墙跳、冲刺次数、角色外观、背景和音乐。
  • 实现“状态改变关卡读法”的核心链路:平静显示隐藏平台,快乐强化机动性,愤怒允许冲刺破坏障碍。
  • 在 48 小时限制内完成开始菜单、关卡推进、检查点、死亡复活、碎片收集、计时结算和胜利画面。
  • 在后续本地工程整理中,将构建场景整理为 StartMenu -> 001 -> 002 -> 003,并补入按关卡记录用时的排行榜、关卡完成菜单、音量按钮和触发式自动打字提示。
  • 整理 TapTap、Global Game Jam、B 站演示和可执行包所需的介绍、标签、平台信息和展示素材。

技术实现

项目使用 Unity 与 C# 开发,重点放在角色控制、状态事件和关卡反馈的快速闭环上。 我把这个项目拆成“玩家控制、情绪状态、关卡反馈、死亡复活、结算发布”几层来讲清主线:玩家输入先进入移动和跳跃参数,MaskControl 再把情绪写回角色参数与场景对象,最后由陷阱、破坏物、碎片和结算系统给玩家反馈。这个拆法能让页面更清楚地说明:Emotion Mask 的核心不是三套皮肤,而是一套会改变关卡可读性的状态机。

  • MaskControl 作为情绪状态中心,维护 NeutralHappyAngry 三种状态,并通过 OnEmotionChangedEvent 通知平台、音乐和其他反馈系统。
  • 每个情绪都有独立的 EmotionStats,会同步写入 PlayerMovePlayerJumpPlayerDash,让移动速度、跳跃力、二段跳、贴墙跳、冲刺速度、冷却和空中冲刺次数跟随状态改变。
  • 平静状态通过 neutralPlatformsEmotionalPlatform 控制隐藏平台的显示和碰撞;切换离开平静时会解除玩家与平台的父子关系,避免平台被隐藏后把玩家一起带走。
  • 愤怒状态与冲刺系统联动:PlayerDash 判断当前是否为 AngryHurtcheck 只有在愤怒且正在冲刺时才调用 BreakableTilemap 或障碍动画完成破坏。
  • 死亡与复活由 HurtcheckCheckPointGetRespawn 串起来:陷阱触发死亡动画后回到最近检查点,避免失败直接打断关卡节奏。
  • 碎片收集由 Hurtcheck 通知 GameManager,达到目标数量后停止计时、记录排行榜、锁定玩家控制、切换结局音乐并显示胜利流程。

系统结构

项目脚本主要拆成五个模块:

  • 玩家控制系统:PlayerMovePlayerJumpPlayerDashGroundCheckWallCheck,负责平台跳跃手感和冲刺行为。
  • 面具切换与表现系统:MaskControlMaskAnimatorEmotionalPlatformMusicManager,负责状态、外观、平台显隐和音乐切换。
  • 关卡交互系统:CheckPointGetRespawnHurtcheckTrapCheckPlatformMoveBreakableTilemapCollectibleRotation,负责失败、复活、移动平台、障碍破坏和碎片反馈。
  • 流程与结算系统:GameManagerGameTimerLevelLeaderboardLevelCompleteMenuPlayerCheckpoints,负责目标碎片、最终用时、关卡排名、关卡跳转和流程锁定。
  • 菜单与界面系统:StartMenuGamingMenuSceneLoadButtonMapSelector 与基础 UI 动效,负责开始、暂停、选关、重开和返回。

整理成流程后,这个项目的关键不是“状态越多越好”,而是每个状态都要接回关卡反馈:

Emotion Mask 系统流程图

核心数据流是:玩家按键切换面具,MaskControl 更新当前状态和角色参数,再通过事件驱动平台显隐与音乐切换;玩家移动、跳跃和冲刺进入关卡交互,陷阱走复活链路,愤怒冲刺走破坏链路,碎片收集走结算链路。这个结构让 48 小时内的系统足够轻,但每个反馈都能回到“情绪切换”这个核心机制上。 工程取舍上,我优先保证“失败后能继续玩”和“状态切换不留下脏状态”:隐藏平台关闭前解除父子关系,陷阱死亡后回到最近检查点,胜利时锁定玩家控制并统一切到结局音乐。它们不是最炫的功能,但决定了一个 Jam 作品能不能被陌生玩家顺利试玩。

发布与反馈

《Emotion Mask》已发布到 TapTap,并同步提交到 Global Game Jam 2026。TapTap 页面展示了游戏简介、平台配置、开发者说明和玩家评分;GGJ 页面记录了项目的 Jam 年份、主题、站点、平台和开发工具。

这次发布让我第一次完整经历了“原型完成之后如何被别人看到”的过程:不仅要做出能玩的版本,还要思考封面、简介、标签、配置说明和下载入口如何共同呈现作品。后续本地工程里出现的多关卡流、排行榜和 UI 辅助系统会继续作为迭代基础,但是否进入公开版本仍需要后续手动 Play Mode 与打包验证。