当前位置:   article > 正文

UE4构建硬核战斗与无缝随机关卡:《生死轮回》的设计与Gameplay技术实现 【笔记】_roguelite游戏关卡设计

roguelite游戏关卡设计

 游戏介绍

《生死轮回》是一款基于虚幻引擎4开发的Cyberpunk题材横版Roguelite动作游戏。这款游戏基于C++和Blueprints进行Gameplay与功能开发。

视频的内容由两部分构成:

结合这款游戏,介绍"战斗系统"和"无缝随机地图"的设计及实现技术细节。

作为制作人Gameplay程序员,李伟将遵循自己在游戏开发过程中的路径展开讨论:从简单的单点功能设计到技术实现细节,到各模块的内容交汇在一起构成复杂的游戏性系统。

正文

战斗系统

主要讲“近战武器”+“受击者反馈”这两个系统。

一、近战武器设计

技术目标

实现30多种武器的基础伤害功能,拉开不同武器的感受差异

特性分析

武器形状(精确的攻击范围)

目标角色反馈(对不同目标:机器人,人类做出不同的反馈)

表面材质反馈

击打顿感:利器和钝器

1 近战武器框架:

  • GamePlay功能多用C++实现,牵扯到可视化配置时,开放给BP子类(之前有提到过如何做到这个)。
  • 为每把武器建造两个插槽,可以定义武器攻击的扫描范围

2 近战武器检测实现

<1>线性检测

玩家挥动武器时,从一个端点朝另外一个端点不断的发出射线,扫描自己击中的物件的一个过程(之前坦克游戏博客篇有涉及,比如DrawDebugLine函数等)。

<2>由角色驱动的检测通知

角色在挥舞武器时检测,自定义攻击检测的通知节点,在攻击动画播放时调用代码。 

trace可以写在Tick中,也可以自定义Timer。

<3>受害者队列

创建了一个数组,每次击中时判断敌人是否在里面,如果不在就加进去,进行伤害处理;如果再次击中,就把他排斥在外。

但同一个敌人可能会在Trace过程中被多次检测,多次受到伤害(保证起始到结束不重叠即可)。

3 近战武器击中反馈实现:

<1> 击中目标

IsInHurtList和Teamid来进行判断

<2> 飞溅的血液和清脆的金属

使用HitResult获取目标角色被击中的位置信息,然后播放粒子效果(类似坦克发射子弹点,播放粒子效果)。

使用HitResult获取物理材质,基于这个播放对应效果。

<3>摄像机震动

使用PlayerController的ClientStartCameraShake

https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/GameFramework/APlayerController/ClientStartCameraShake/

<4> 击打顿感

SetGlobalTimeDilation函数,可以设置整个游戏世界的时间播放速率。

二、受击者反馈

2.1 受击者特性分析

动画、推力和溅血

1 推力

ABaseCharacter实现了角色和敌人的共有特性及功能

2 受击动画反应

  • 轻受击
  • 重受击
  • 被击飞(状态机):起飞,飞行(循环),落地,爬起

在ApplyPointDamage函数中,最后一项为DamageType,团队对这个进行了扩充,定义了自己的受击类型。

基于受击类型,进行受击动画反应(播放蒙太奇动画)。

3 溅血等细节表现

泛起溅血贴花的效果,当敌人承受攻击后,四周的地面和墙壁将会泼洒血迹。

 2.2 角色死亡特性分析

死亡效果呈现

<1> 布娃娃效果

注释[1] [2]:

在早期电脑游戏中,开发者通过手工制作一组按动作顺序的角色图像,并接连显示出来以达到角色动画的目的。这种技术对处理器的要求很低。

随着电子科技的不断发展,在游戏中实现即时动画逐渐变成现实。开发者用三维绘图工具制作一个角色模型,并在合适的位置给角色安装骨骼,通过游戏引擎中的骨骼控制模板,控制这些骨骼的移动,而角色的表层随着骨骼的移动而发生相应的变化。这样的技术让游戏中的角色有更加多变丰富的动作可以变现。

但由于技术的限制,诸如骨骼的移动没有类似肌肉的物质来约束,以致游戏引擎在控制移动骨骼时,常常出现将骨骼移到一个在现实中不可能实现的位置,就像布娃娃,该系统由此得名。

第一个使用了布娃娃系统的游戏是《侏㑩纪公园:侵入者》,虽然该作漏洞百出,但还是因为率先使用了物理引擎而被载入史册中。

当前的游戏设计中,布娃娃系统常用在动作游戏以及射击游戏中,且技术有了很大进步。玩家控制角色身体的一部分,其余部分跟着运动,进而营造一种丰富的动作表达。

为角色绑定好布娃娃效果,在敌人死亡时,激活角色SkeletalMeshComponent的物理模拟。

<2> 断肢系统

在伤害类型中定义很多的断肢情况。

直接关节处解绑是一个想法,但是团队在开发过程中找到了更简单的方法。

基于不同的伤害类型,使用HideBoneByName,传入对应的骨骼,进行隐藏肢体。

然后还要生成一个具有物理效果的肢体。

接下来就是无缝Roguelite地图:游戏共有7个大关卡,每个关卡在每次进入时都和上次不同,整个过程无缝连续,具有如同线性游戏的连贯游戏体验。

三、具体实现

不记录对于游戏的优缺点分析。

3.1 实现方案参考

<1> Procedural动态生成——死亡细胞

可以先看下YouTube这个视频介绍[3]。

制作了大量的随机房间,对其进行分类

定义好出口和入口,按照预设的算法规则,在关卡初始化时,动态的将这些出口和入口进行连接。

图片来源:[4]

 <2> 房间过渡式动态生成——HADES

图片来源[5]:

制作大量房间,玩家每离开一个房间,按照一定的拓扑规则,黑屏加载下一个,卸载当前的。 

3.2 随机地图设计

按照线性游戏的制作思路开发了一个完整关卡,然后对其按照区域拆分。让每一个区域有满足整体和周边风格的迭代。

在对区域进行多次美术迭代后,思考是否也能对每一个美术区域的逻辑,进行多次迭代,以丰富关卡体验。

区域由“美术”和“逻辑构成”

<1> 关卡区域拆分

每个主关卡,由自己和按照区域划分的包含在其中的大量迭代子关卡构成。

<2> 主关卡构成

3.2 随机区域实现(略)

希望国产独立游戏,国产单机游戏越来越好。

参考:

[1] 维基百科

[2] 游戏中的布娃娃物理特效是如何实现的-网易公开课

[3] How Do Procedural Game Worlds Work In Video Games?

[4] Biome Map Updated for Fatal Falls!

[5] Hades-level-design-is-less-random-than-it-seems

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/894943
推荐阅读
相关标签
  

闽ICP备14008679号