开放世界类型游戏的设计与制作

2020-10-09 10:24周正司占军秦雷
电脑知识与技术 2020年22期

周正 司占军 秦雷

摘要:如今的国内游戏市场多以移动游戏为主,单机、主机游戏比重占比较少,在画面表现和游戏创意玩法上与国外游戏存在较大差距,开放世界游戏是现在主流的游戏模式,这种模式可以给玩家带来足够的自由度,玩家的不同选择会导致游戏任务结局的不同。该文基于Unity引擎设计并制作一个开放世界类型游戏,使用了Unity的HDRP管线,然后通过3dsMax、Blender来制作模型动画,通过Unfold3D来对模型进行展UV操作,使用Photoshop来对游戏中的图像元素进行制作。最后使用C#语言脚本实现游戏逻辑,最后在Unity引擎制作游戏并将其发布。

关键词:开放世界类型游戏;HDRP;Unity3D

中图分类号:TP37 文献标识码:A

开放科学(资源服务)标识码(OSID):

文章编号:1009-3044( 2020122-0001-02

在开放世界型游戏中,玩家可以自由地在场景中进行漫游,可以有选择性地完成任务,这种游戏也被称为“漫游式”游戏。由于自由度高且可玩性较强,如今开放世界游戏设计模式已经广泛被运用到各大厂商游戏作品中。然而国内游戏中使用开放世界游戏模式设计的游戏少之又少,刨除大部分移动手机游戏,剩余的RPG游戏中,游戏模式多以线性剧情为主,游戏可玩性较差。

本文采用Unity引擎进行制作,主要研究内容为在Unity如何开发开放世界类游戏和游戏优化上,包括计算机编程、镜头运用、动画设计制作、平面设计以及游戏关卡等方面。另外,高清渲染管线(HDRP)的应用,相比于以往的默认管线,在图像的绘制和表现上具有较大的提升。

1 开发环境及软件

Unity开发环境为Windowsl0专业版,英特尔Core(TM)i7-6900k CPU3.20GHz,32G内存,64位操作系统。另外游戏制作还用到了Autodesk 3ds Max 2016,Adobe Photoshop CC 2018,Blender, Visual Studi0 2019 Community,Unfold3D等软件。

2 游戏设计思路

本次开放世界类型游戏的整体思路由以下几个部分组成,使用3ds Max以及Blender进行建模,使用Photoshop进行平面素材的设计与制作,使用Unity引擎中的UGUI工具完成交互部分,在Unity中完成游戏场景搭建,以及C#语言实现游戏逻辑功能。本次设计的整体思路流程图如图1所示。

3 开放世界类型游戏的设计与制作

3.1 模型制作和贴图绘制

使用3ds Max制作的模型主要为人物模型,由于整体的画风属于Lowploy风格,所以在人物建模上可以有效地缩短制作时间,制作完成后将三维模型导出为.obj格式的文件并导人Unfold3d软件进行UV展开。使用Blender2.8制作Lowploy风格的房屋树木等场景,因为Blender在2.8版本的雕刻模式可以更快地实现Lowploy风格的制作。

接下来将展开UV的模型文件导入SubstancePainer中去,将贴图的大小设置为2048*2048大小,创建成功后如图2所示。SubstancePainter可以将不同的图层叠加,生成最后的贴图,各图层之间可以添加蒙版,可以对相应区域进行遮罩处理。在SubstancePainter中可以使用智能材质,智能材质可以直接拖拽到模型上,添加到模型上时会自动展开成不同的层级。

3.2 游戏UI设计

本次制作的游戏整体风格为Lowploy风格,游戏名称命名为《纸届》,所以整体的风格设计偏纸上涂鸦。因此需要对大量的图像进行手绘,从而使得整体效果与游戏风格相匹配。游戏中含有的UI系统包括主页、设置界面、背包系统、角色面板等,制作过程在Photoshop中完成。

3.3 场景搭建

将模型导入Unity中后,需要创建材质球。在Assets中创建相应的文件结构,把模型资源放在Arties文件夹中,并在其中创建Models文件夹并创建Material,由于工程采用HDRP,所以材质使用名称为“HDRP/Lit”的着色器。创建完对应材质球后,需要对其属性进行修改。首先对SurfaceType进行设置,如果需要呈现透明效果的话,将该属性设置为Transparent。在SurfaceInputs属性分类中,Base Map属性可以改变材质球的颜色,可以将材质球設置为纯色,也可以将其设置为一张纹理贴图,Metal-Iic和Smoothness属性可以对材质球的金属度和光滑度进行设置。制作完材质球后,把材质球赋予模型,将每个模型组建变为预制体,将预制体拖入场景,并摆放到合适的位置,制作完成后如图4所示。

3.4 游戏逻辑脚本编写

代码首先要实现的功能是对游戏角色的控制,包括使用键盘完成行走、加速跑、跳跃功能,以及使用鼠标实现角色的旋转等。以跳跃功能为例,需要检测玩家是否位于地面,首先要以游戏角色下方为原点,向下发射一条有长度的射线,如果该射线检测到碰撞物体为地面的话,证明角色现在位于空中,该代码的实现方式如下:

RaycastHit hitlnfo;

#if UNITY_EDITOR

Debug. DrawLine(transf'orm. position+ (Vector3. up*O.lf),transform. position+(Vector3. up*0.1f)+(Vector3. down*In—GroundCheckDistance》;

#endif

if (Physics. Raycast(transform. position+(Vector3. up*O.lf), Vector3.down, out hitlnfo,m_GroundCheckDistance》

{

m_GroundNormal= hitlnfo.normal;

m_lsGrounded= true;

m_Animator.applyRootMotion= true:

elsef

m_IsGrounded= false:

m_GroundNormal= Vector3.up;

m_Animator.applyRootMotion= false;

游戲中NPC的行为通过BehaviorTree插件来实现。该插件主要功能为辅助创建电脑角色的行为树,优点在于可以使游戏中NPC的行为可视化。首先打开Behavior Designer面板,选择需要添加行为的电脑角色,点击创建行为树,首先创建一个Se-quence节点,该节点为顺序节点,当其下的子节点执行返回为真时,该节点为真,结束行为树,然而当节点为假时,继续执行下一节点,所有节点均为假时,此节点的返回值为假。

之后再新建两个Sequence节点,实现NPC在两点之间的移动,分别在两个节点之下再添加Seek节点和Wait节点,Seek节点将实现该NPC移向目标点的行为,而Wait节点则实现了NPC停留的功能,制作完毕的行为树如图5所示。然而此时进行播放,并不会达到预期效果,行为树的Seek节点完成之后,并不会继续执行下一个行为,而是直接返回,此时需要将Sequence节点的Abort Type设置为Self,此时当其中一个子节点完成后,将继续按顺序执行下个一子节点,而不会像之前一样直接返回,此时已经完成了NPC的行为树[1]。

3.5 测试与发布

在制作完毕之后,需要对游戏进行多次测试,包括场景地图的搭建,UI贴图,游戏角色控制的流畅度以及相关的代码逻辑等,找到游戏中存在的Bug,然后对其进行修复,之后在Unity中将其发布到PC平台,在File菜单栏下找到Buiding Setting,再设置相关参数之后点击Build即可。

4 结束语

根据国外游戏设计发展趋势,开放世界游戏将逐渐成为一种主流关卡设计模式,它可以减少过多的可视化场景加载,减弱地图边界的存在,提升了玩家玩游戏时的沉浸感。另外,游戏采用Unity最新的高清管线(HDRP)进行制作,在性能优化和画面表现力上要整体好于默认管线,因此基于Unity技术开发开放世界类游戏非常具有前瞻性。

参考文献:

[1]何赛,游戏人工智能关键技术研究与应用[D].北京:北京邮电大学,2015.

【通联编辑:谢媛媛】

作者简介:周正(1996-),男,山东枣庄人,硕士,研究方向为虚拟仿真技术;司占军(1971-),男,河北人,教授,硕士,研究方向为数字媒体技术;秦雷(1997-),男,学士,研究方向为数字出版。