“开局一把斧,装备全靠打!”Unity集训营学员带你一起流浪不一样的中世纪
一般我们接触的带有副本的 ARPG 游戏都会把大 BOSS 放在最终关卡,玩家需要通过剧情中小关卡来解锁最后一关。但今天小 U 要介绍的这款出自于 Unity 学员之手的 3D ARPG 游戏,却让小 U 吃了一惊。
这个名为《流浪中世纪》的游戏开局,玩家就出生在一个中世纪背景的城镇附近,玩家通过与居民的交流确定兽人的出生地,按照游戏制作者的说法,只要你确定了兽人的位置后,就可以去找它挑战了!
这意味着玩家有机会过滤掉大量的对话和副本,直接进入终极对决,这样珍爱玩家时间的制作人值得小 U 点赞!
不过要是真这么去玩,那玩家死得可能会更快一些,因为游戏设定的开局装备还是很初级的 5 件套:帽子、衣服、裤子、武器、鞋子。要获得更好的装备,玩家还得花金币去商店购买,赚取金币的途径嘛还是通过与城镇居民的对话获取战斗任务。
看到这,你可能会觉得制作人欺骗了你,这款游戏表面上有着直接跳跃通关的逻辑,但玩家还是需要猥琐发育。不过《流浪中世纪》给予了玩家很高的自由:玩家可以自由搭配装备属性,如果玩家觉得自己的装备够硬,就可以尝试挑战最终 BOSS。
这就像等级考试一样,觉得可以就上呗,大不了从头再来!
因此小 U 作为聪明的玩家,当然选择先在城镇附近逛逛,完成一些提升属性的小任务,等到有了足够的钱,把身上的装备换成最好的,再去找 BOSS 对决。
用Terrain Tools资源包进行地图编辑
小 U 不禁觉得,《流浪中世纪》这种动作角色扮演中还带有一点开放世界玩法的游戏,对于地图和模型的要求一定很高。游戏还涉及中世纪历史背景,涵盖的建筑类型就更复杂了,即便是在城镇外的山地地形中制造出一座被掩埋的竞技场,也不是一件容易事。
为了能方便的批量编辑出城镇周边的地形效果,《流浪中世纪》团队借助了 Unity 的 Terrain Tools 资源包工具。
这个工具拥有全新的雕刻工具和常用工具集,并加入了对旋转,间隔和分散的控制功能。强度,大小和角度参数现在拥有抖动控制,以帮助开发者添加自然变化到笔触效果,助力开发者自动化完成枯燥的任务。
比如《流浪中世纪》中玩家登上竞技场的山坡是由 Bridge 制作,山脚的梯田则是由 Terrace 制作。
负责地形编辑的孙嘉诚同学细举了 Terrain Tools 资源包的一些新功能,比如提供了增加地形细节的 Erosion 侵蚀工具和用来丰富植被的 Tree 编辑器,其中 Erosion 侵蚀工具可以基于水,风和热量的侵蚀效果来修改高度图。更加完善地形的细节。可以让纹理看上去是你想要的效果,比如水侵蚀形成的洼地。
当然刚刚制作好的地图效果,地面的阴影看起来极其的不真实,孙同学就给地图做了后期处理,利用 Unity 的 Post Processing 后处理工具,环境光遮蔽(Ambient Occlusion)颜色分级(Color Grading)泛光(Bloom)自动曝光(Auto Exposure)等效果。
这样一个真实的山川河流的模型效果就展示在了眼前。
孙同学还告诉小 U,Unity 的相机工具十分强大:“在相机上添加 Post-process Layer 并在空物体上添加 Post-process Volume 勾选 Is Global,就实现在全局添加后处理效果的功能了,有什么需要都可以自己调整。”
人物对话和交互界面如何用Unity实现
除了庞大的地图外。《流浪中世纪》中还有复杂的人物对话和交互场景。
孙同学说,这个游戏设置了对话系统和任务系统,对话系统是指人物之间的对话,通过读取 txt 文本中的对话并显示在对话的 UI 界面上,利用协程实现字幕滚动效果。
而任务系统则是有不同的任务类型,分别是对话类,收集类,探索类,每种任务都可以设置任务目标,当完成任务目标的时候,任务状态会随之改变,他们的完成条件并不一样。
其中对话类的任务会附带在人物对话中,而玩家也会根据任务状态进行不同的对话,任务有着三个状态,分别为等待接取,已接受,已完成。对话正是根据三种状态实现三种文本的切换,来实现不同任务状态下的不同对话。
要实现玩家的对话和任务就要有 UI 交互界面的支持。
负责 UI 设计的程辉同学说,《流浪中世纪》的 UI 设计中最有难度的部分就在游戏菜单的设计。
其中菜单栏部分玩家使用的交互次数较多,为了让菜单界面看起来不那么凌乱,程同学就将角色的属性面板、人物背包还有人物设置放在了同一个面板中,这里主要利用了 MVC 框架来实现角色详细属性、背包、商店、设置窗口的显示与隐藏,并通过 Animator 状态机结合 Control 脚本控制动画的切放时机。
人物的背包部分则要实现装备的穿戴、卸下,购买、出售装备状态的同步显示和标记,不然就会有玩家将两件不同的甲衣同时穿上的尴尬情形。为此程同学通过枚举来为部位装备进行标记,并分别封装方法来完成装备的状态判定,他还使用 Json 来读写,方便了装备的信息编辑与调整,同时也可以保存修改后的内容。
只是由于装备物品在发生状态变化时都需要修改Json数据,并刷新UI显示,本来程同学希望减少读写与刷新次数来减少 GC 和 Draw Call,但是考虑到刷新不及时又会出现 UI 显示与实际存储数据不同的问题,所以这里的刷新次数最终并没有减少。
如何用Unity编辑器解决人物移动的问题
《流浪中世纪》的人物动作设定也是游戏的一大难点,袁质斌同学在设定玩家和 BOSS 的移动控时就遇到了诸多问题。
首先是人物的移动,理论上,玩家的主要朝向是受到摄像机前方位置的影响,人物的前进方是跟摄像机前方是保持一致的,玩家的子物体则受到键盘的控制,为了防止玩家在移动时的朝向不受键盘的控制,袁同学设计了一个父子物体的方式。解决键盘和摄像机控制打架的问题。父物体在移动时转向相机的前方,子物体移动时方向由键盘控制,这样可以保证人物前后左右移动是以相机前后左右为准。
人物移动问题解决了,但玩家受到地形的影响,又出现了新的 BUG 袁同学发现人物每次在上坡地形移动时,走着走着就会掉进深渊。反复试验后袁同学发现一般 Unity 编辑器设置的碰撞体,在走平地时很容易卡近地面里。于是袁同学给人物增加了一行,斜坡判定。上坡时,人物的预制体就不会莫名其妙的掉到地面以下了。
相机穿模也是 RPG 游戏中经常遇到的问题,为了设置正确的模型遮挡,袁质斌同学先想到了 Unity 自带的使用了 cine machine 来解决这个问题,作为 Unity 的智能化无编码摄像机套件,cine machine 可以让美术师实时调整、迭代、试验和创建摄像机行为,节省开发时间。
考虑到 cine machine 还有其他的功能,袁质斌同学就去挖掘了一下它的底层实现逻辑,发现 cine machine 是用射线检测对模型物体进行判断,于是袁同学就用代码写了一段射线检测的判断方法,实现了相机防遮挡的正常逻辑。
除此以外,袁质斌同学还给玩家人物设置了自动攻击选择设定,玩家在攻击小怪的时候,会自动选择比较近的敌人进行攻击,这里袁质斌同学用触发器判断附近范围内的所有敌人,并判断距离,从而实现玩家在攻击时选择转向最近的敌人。
值得一提的是,游戏中的装备基本上来自于商城购买,玩家要想获取更高级的装备战胜 boss,就只能不断地做任务/打怪赚钱,看来这次的开发团队可谓是深得猪场游戏的“精髓”。
对于《流浪中世纪》的开发团队而言,《流浪中世纪》只是开发路程上的一座小小的里程碑。对他们来说,这段开发之旅的意义,并不仅仅是做出了一个不错的游戏 Demo。更重要的是,他们在 Unity 集训营收获了更全面的技术知识,为自己未来的职业道路打下了坚实的基础;以及结识了许多相关领域志同道合的人才和拥有丰富经验的前辈。
小 U 相信,拥有这段经历的他们,在未来真正进入职业开发生涯之后,所做出的成绩会更加出色、耀眼。如果你也想像他们一样,欢迎加入 Unity 集训营。
长按关注
第一时间了解Unity引擎动向,学习最新开发技巧
点击“阅读原文”,了解Unity集训营