项目_02

Unnameable Cases

一款单人开发的恐怖解谜游戏

Unnameable Cases 是一款基于普渡大学教授原创模板、由我单人重构的恐怖解谜游戏。项目核心目的在于练习搭建集中控制(Manager类型)蓝图的架构模式。

职责:
单人开发
标签:
蓝图集中控制游戏系统管理器蓝图

项目概览

Unnameable Case 是一项长期课内作业所产出的成果,该课程主要提供了一个附有 Manager 蓝图的控制器,方便同学直接套用模板中的功能。由于项目的蓝图过于久远,我在拿到的第一时间进行了重构,其依然保持了总体的逻辑和数据流,只在部分细节上加入了方便调试的接口和更加自定义的功能。

编辑器内视角

Manager 蓝图

Manager 蓝图不是一种程序意义上的类型,只是一种用于集中处理关卡内数据的方法。这样通过集中处理数据能够简化多个蓝图之间沟通的成本,同样能够让数据的存续时间更加清晰。

Unnameable Case 用到了多个 Manager 蓝图,分别是游戏总控蓝图、任务控制蓝图以及遭遇战控制蓝图。

游戏总控蓝图

游戏总控蓝图主要用来与其他分控蓝图沟通,并储存需要在关卡范围内长期保存的数据。或者处理在其他分控职责以外的关卡内容,比如开局的提示。

总控蓝图开局(点击放大)
总控蓝图呼叫效果

总控同样负责链接各个分控,并处理需要跨越分控职责的请求。

主控初始化与分控的连接

任务控制蓝图

任务控制蓝图主要控制任务状态,让玩家能够依次触发任务,可以自定义触发条件,任务内容同样可自定义,总体运行效果类似有限状态机。

任务控制蓝图初始化

触发下一步后需要准备的事情,包括检查任务步骤、触发对话、触发战斗、生成下一步的任务道具等。

触发下一步(第一部分)
触发下一步(第二部分)

战斗控制蓝图

战斗控制蓝图则专门控制所有的战斗,这个项目中所使用战斗类型的则是十分常见的回合制对战,类似宝可梦对战。为了简化制作流程和避免我没有经验的美术和动画部分,所有的结算都由文字显示给玩家,比如命中/未命中等。

在游戏开始时,这个分控蓝图也需要和总控取得联系,以便后续结算战斗后的数据,比如玩家经验等级,剩余血量状态等。

战斗控制蓝图初始化

当战斗开始时,这个控制蓝图将会对一场战斗进行初始化,比如将玩家传送到对战场地以及生成敌人模型等。

初始化一场战斗(第一部分)
初始化一场战斗(第二部分)
战斗界面
战斗界面

战斗方式为回合制,将对方血量降到0获胜,己方血量降到0失败。每回合可以在数个行动中选择一个执行,每个行动均有不同效果。其中,敌人的行动由电脑随机选择,后续将加入权重选择和技能组。

行动代码(玩家部分)
行动代码(敌人部分)

其他独立系统

除了几个集中控制蓝图,游戏内还加入了一些互动和证据的独立系统,这些系统同样能够影响玩家的游戏进程,比如解锁后续非必要剧情或者增加属性。这些独立系统在触发后通常会联系其从属的分控蓝图,可以将这些系统视为分控蓝图下更低一级的存在。

鹰眼视野

这里的鹰眼视野是通过使用 Custom Stencil 值区分任务目标与友方 NPC,并通过后处理材质分别实现不同颜色的穿墙高亮效果。

Custom Stencil(代码部分)
透视效果

拿起检视

拿起检视则是通过一个简单的有限状态机来实现的,在拿起状态下,切换数个输入模式,使玩家能够用鼠标拖拽旋转物品,并且还能用鼠标单击来解锁证据。

拿起检视和鹰眼视觉

游戏内容

开幕
对话 / 触发第一个对话
检视 / 鹰眼视野
鹰眼视野
获取证据
证据界面

总结

相比于另外两个小组作业,这个个人项目显得没那么完善。这个项目主要用于练习搭建由蓝图集中控制的关卡事件。目标是通过将子系统分散到各个分控系统中来尽量简洁的使各个系统能够允许并在需要时互相交流。