查看原文
其他

世界末日,赶快逃离!Unity学员用游戏打造《行尸走肉》“续集”

Unity Unity官方平台 2022-05-24
小 U 记得十年前刚接触到美剧时,追过一部很火的丧尸主题电视剧——《行尸走肉》,相信喜欢恐怖的小伙伴一定看过这部剧,它可是当时美剧中的金牌神剧,还曾刮起过一阵全球“丧尸片”龙卷风。

这种末日生存的丧尸题材影视剧同样影响着着许多游戏领域的策划,很多游戏创作者希望能够用 Unity 引擎实现这种影视剧里成千上万个僵尸或者怪物追逐玩家的效果,就比如 Unity 学员的新作《ISLAND》

《ISLAND》是一款 2.5D 第三人称动作射击游戏,它的故事背景发生在一个科幻世界,陨石群坠落给人类带来了巨大的灾难,陨石辐射以及它所携带的病毒感染了许多城市里的人类。在危机爆发时,主角需要逃离这座城市寻求生机。



《ISLAND》的主创同学说:“玩家在逃离城市时会遇到各种病毒感染者,这种场景就像美剧中成百上千个饥渴的僵尸追逐幸存者的场面,而作为幸存者,玩家需要依靠远程射击和搭配近战及其他技能,击败这些感染者。”



在叙述形式上,Unity 的学员希望用单元剧的形式来呈现游戏中人物的逃难过程。但与世面上的一些末日逃生向的游戏剧情不同,《ISLAND》并不是那种简单刺激的人尸对抗,学员希望利用独特的游戏镜头视角,关卡和武器和技能机制设计让玩家体验在灾难爆发、人类和感染者互相对抗的同时,也能感受到末世背景下依旧存在的希望。

作为一款冒险生存类的游戏,玩家的代入感和真实感尤为重要。因此,《ISLAND》团队在镜头视角的选择上就力求追给予玩家真实的体验。



团队参考了世面上成功的军事题材和丧尸题材游戏,并对他们的武器和技能交战模式进行分析,最终采用了斜俯视角

简单来说就是让 Unity 引擎中的相机,纵轴旋转 30 度,将屏幕象限三等分,这样可以让游戏人物斜向移动时保持原定的位置方向,这样的视角比直视视角更符合现实逻辑,又有强烈的战斗气息和紧张感。

关卡方面,《ISLAND》游戏关卡的难度是逐级增加的。在初始房间时,玩家失败将不会受惩罚,练习关卡时,玩家失败会受到少量惩罚,而在熟练关卡中,玩家要通关就必须要熟练掌握之前学习到的战斗技巧,而闯关失败的话惩罚也会更高。

有趣的是,《ISLAND》的策划为了增加人机对抗的趣味性和挑战性,还设计了“Twist”关卡,也就是玩家至少要熟练掌握,并且能顺利搭配混用2种游戏机制,才能顺利通关。



作为一款射击游戏,没有特别的武器弹药怎么行?学员利用 Unity 引擎给角色的添加了不同种类的子弹,通过改变速度、打击范围、穿透和爆炸效果,让每种子弹都具备不同的特性,玩家需要根据敌人的数量、类型,来选择不同类型的子弹战胜敌人,这就带来了更丰富的游玩体验。


高速子弹


强化子弹


小 U 想,按照这样的逻辑,即使面前的敌人很多,只要我多积累一些爆炸威力大,杀伤范围广的子弹,那战斗时即便敌人再多不也无所畏惧了吗?游戏的挑战性瞬间就被拉低了。


“高杀伤力的武器弹药设计初衷是为玩家解决少数的一些困境,提升玩家的对抗体验,而非让游戏变得‘索然无味’,如果成了 FPS 式的割草游戏,那就偏离我们设计这款游戏的核心了。”仿佛是看出了小U的疑惑,《ISLAND》的策划如是说。


为了防止游戏因为某些大威力武器或者技能而变得没有挑战性,《ISLAND》有一套比较特别的战斗机制。玩家子弹的发射和体力、技能(CD)挂钩,威力越大的子弹消耗的体力越大,CD 激活的时间也就越久。


为此负责游戏玩法实现的同学利用 Unity 引擎开发了射击机制,当玩家按下射击键时,系统会对当前状态进行判断,让玩家只有在子弹充足,体力充沛且相应的 CD 激活的情况下才能正常的发射相应种类的子弹。


为了实现玩家在游戏中移动射击和释放的状态,主创对玩家的游戏状态机制,移动转向和属性进行了设计。

游戏状态机,被学员划分成三种层级:基础层,遮罩层,互斥层。他们将玩家基础的移动放到基础层级,将射击,换弹可以在移动中的操作放在遮罩层,以实现玩家移动射击的功能,并且利用互斥层玩家倒地或者直立的状态进行设定。



玩家的方向转向主要是通过 Screen to View,鼠标在屏幕的位置的映射去控制玩家脸部的朝向,这样相比于鼠标射线检测会更加精确,受到的地形因素的影响更小。举个例子,前面有个高低的地形差,那么当鼠标射线进行检测的时候,玩家脸部朝向有一个较大的误差,这样设计就可以减少误差的影响。


而在怪物的设计过程中,技术策划同学给游戏设计了三种不同类型的怪物,负责美术的同学将他们按照等级和属性细分为六个小类,并为他们设定了不同的动画。



值得一提的是,负责技术美术的同学还利用 Unity 引擎制作了一个怪物自动生成器,可以在后期非常方便地调整怪物的种类、生成速度和生成个数和移动属性等参数。



项目组的同学告诉小 U,作为一款末日题材的 2.5D 射击游戏,《ISLAND》制作需求是很大的,但实际的课程又要求在短短一个月的时间内的时间实现游戏主要的功能,因此,对开放团队来说,如何尽可能地提升整个项目的工作效率,是他们面临的首要挑战。


每个人的分工不同,很多功能又需要几位小组成员的共同搭建下实现,如何才能更好掌控每个人制作的进展,减少 BUG 的产生,高效地推进项目流程呢?



在 Unity 老师的建议和帮助下,《ISLAND》团队学习到了许多巧妙的方法,能更方便地进行协同合作。比如利用思维导图直观地呈现 Assets 文件结构和 Scene 场景的逻辑图,不仅能让组内各成员更方便的查看对方资源的实现过程,也方便了整个项目管理和维护。



在构建程序框架的过程中,小组灵活使用插件和 Unity 的高级特性,将 Odin 插件与 ScriptableObject 结合,支持字典序列化、配置动态加载,便于开发维护。使用拓展方法获取特性,资源管理,本地化,非 mono 继承 mono 脚本启用生命周期函数和协程。同时为具有特定目的的类指定自定义属性,例如 UI 类和对象池类,结合反射找到所有被 UIElement 属性标记的 UI 窗口类并根据属性路径参数加载对应的预制体和层级,是否需要缓存,与 UI 框架结合完成了复杂 UI 层级的管理。



框架整体基于观察者模式的设计方式构建事件系统,解耦了方法之间的调用,使得事件调用发生时不用关心对方是否存在,只需要获取事件系统的单例,对方做好触发,事件系统做中转。结合框架级 GameRoot 的 Awake 方法、管理器级 Manager 的 Init 方法,游戏场景级 LVManager 的 Start 方法,使得 UI 框架中的 UIManager 能够调用/销毁所有事件监听方法,某个窗口不关心何时注册/销毁监听。



为了能让小组成员更清晰的了解游戏代码开发的框架,主程对游戏中的每一个代码系统都撰写了一份代码开发说明文档,这个文档从系统的功能出发,将系统的主要类别,每个类别的主要方法,甚至是每个类别的参数以及返回值代表的意义,以及使用的案例都进行了详细说明,这样小组的其他成员就可以以一个很低的学习成本,了解自己系统代码的开发流程。



而在文件交接流程上,小组的学员自己撰写了规范的操作流程文件来保证素材资源交接不出现问题,同时利用 Unity 引擎的打包机制来筛选出工程项目文件中实际需要的素材。来避免实际素材收集时的混杂性。




此外,他们还使用了本地代码仓库的方式进行版本控制,设计了规范拉取流程,有效的控制了代码的简洁,提高了传输的速率,比如一个 5G 的项目,他们只用 30 秒即可完成克隆,仅需 2-3 秒完成拉取,而在项目的开发过程中,仅出现过一次代码冲突,并且快速通过备份完成了现场恢复。


而这样高效的团队协作,必将埋下友谊的种子。通过《ISLAND》游戏的开发经历,让 5 位素不相识的学员变成了工作上默契配合,私下形影不离的好伙伴。


小 U 相信,在未来的职业生涯中,他们也会继续延续着这份对游戏开发的热情、严谨、高效、真诚的心,完成彼此游戏人生中更大的梦想。


Unity 集训营就是这样一个有干货,有温度的 U 地方!如果你也想和一群有见识,有知识,有方法的大咖和牛人,一起在 Unity 实战课中学习制作游戏的技巧,在实战项目中收获合作开发游戏的友情。那就快点击下方阅读原文,了解详情吧!






长按关注

Unity 官方微信

第一时间了解Unity引擎动向,学习最新开发技巧




 点击“阅读原文”,了解Unity集训营 


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存