基于Unity3D的滑板运动游戏的设计与实现

2018-02-05 01:36武家弘宋海玉王鹏杰
大连民族大学学报 2018年1期
关键词:关键帧滑板动画

李 威,武家弘,宋海玉,王 巍,王鹏杰

(大连民族大学 计算机科学与工程学院,辽宁 大连116650)

Unity3D是一个全面整合的专业游戏引擎,在近几年赞誉度极高[1]。在三维视频游戏、建筑可视化、实时三维动画等互动综合型游戏开发上具有很大的优势[2]。本文主要阐述了利用Unity3D引擎,设计实现3D滑板动作类游戏的主要功能及方法,提出了山地模型的一种快速建模方法,以及适合滑板游戏的碰撞检测策略及动作控制方法。

1 功能与效果设计

3D滑板游戏属于运动竞技类游戏,按照该类游戏的特点,滑板游戏主要有以下功能:

(1)设置功能。开始游戏后进入主界面如图1。单击“设置”按钮,跳转到设置界面,可对声音大小、操作方式以及是否全屏等属性进行设置。

(2)游戏场景选择。在主界面中单击“开始游戏”按钮,首先进入地形选择界面。游戏中设置了两种地形模式,即城市模型和山地模型。用户选择其中之一,进入游戏界面。

(3)按键功能。“向上”键控制角色前进滑行;“向下”键控制角色刹车;“向左”和“向右”键控制角色左倾和右倾;“空格”键控制角色跳跃。

图1 游戏主界面

2 系统模块设计

滑板运动游戏要想达到真实感强、可玩性高的要求,在开发过程中需要有严格的任务分工和游戏开发过程。本3D滑板游戏开发主要分为三部分:模型建模、动作和控制设计,如图2。

图2 滑板运动游戏开发模块

2.1 模型建模

2.1.1 城市模型建模

城市场景中包含很多建筑模型,在制作建筑模型前,需要先采集相关模型的数据或照片等素材,根据模型的形态和估算的数据,在3dsmax中利用多边形建模技术对建筑模型进行建模。在建模过程中,要控制面的数量,保障游戏系统能够流畅运行,具体做法如下:

(1)当模型中的两部分有穿插,穿插部分渲染时看不到,将穿插部分的面删除;

(2)对于窗口和墙体,其背面看不到,将窗口和墙体的背面删除;

(3)对于规则物体,如球体,先将其转换为可编辑多边形,通过添加multres命令,改变一定量的球体点数,渲染效果是相同的,但面的数量减少如图3。

图3 球体减面结果

将城市建筑物模型按比例整合到一起,并添加地面以及街道部分,就形成了一个整体的城市场景。

2.1.2 盘山公路模型建模

在Unity中,有一套地形建模工具,即“Terrain”,创建地形后,可以对其进行修改设置。而地形建模过程主要是地形编辑过程。地形编辑工具包括高度工具、最大高度工具、平滑工具、纹理工具、植树工具、种草工具、地形设置等,为了能让地形生成的效率高,效果好,本文提出一种游戏山地地形快速生成方法,步骤如下:

(1)根据游戏需求,初始化地形,并设定地形的基本信息,如高度、宽度,长度等;

(2)先行手工设计地形起伏状态,并据此编辑地形起伏形态;

(3)针对地形表面进行纹理贴图;

(4)利用植树工具种植树木;

(5)如有湖泊,增加湖泊的设置;

(6)利用天空盒和光照系统,根据游戏需求,进行天空和光照的设置。

以上方法步骤是地形生成的主要内容,需进一步根据需求准备相应的贴图。

本游戏即采用此快速生成地形的方法,实现山地模型的基本建模,实验证明效果较好。但滑板游戏的角色必须在比较平坦的公路地面上滑行,因此需要对山地模型进行进一步开发,才能满足滑板游戏的要求。具体过程如下:

(1)为了搭建有向下倾斜10°左右的盘山公路路面,在山地模型中选取一条海拔逐渐降低的曲线,以这条曲线为依据,拉出平面作为公路的空间,即形成了沿着公路逐渐下降的平面;

(2)利用easyroad插件平铺盘山公路,在已有的山地原始模型上,利用easyroad插件沿着事先留出的公路的空间设置一些顶点,将相邻的两个顶点相连;

(3)设置完顶点之后,根据顶点位置生成公路,并在公路上贴上纹理图片;

(4)利用植树工具在道路两旁种植树木。

按照以上过程对山地地形铺设道路以及种植植被,效果如图4。

图4 盘山公路地形的近观效果

2.1.3 人物模型的建模

初始建模时,首先把人物图像的正面和侧面导入Maya中,将正面图像和侧面图像十字正交放置在Maya的界面中[3],以此为参照,在与人物相同大小的长方体上,利用加线和调节点面之间的联系,勾勒出人物的大致体态。然后根据图像中人物面部、身体和服饰的特征,通过挤出、旋转、雕刻曲面等方法,逐步细化出人物的面部、身体和服饰。

骨骼搭建是后面人物动作实现是否具有真实性的关键。将人体骨骼大至分为若干个关节点,如脚踝,膝关节等。创建关节时,利用Maya关节工具创建骨架的关键链,根据人体腿部和手部及腰部自然的方向来调整各关节的位置以确保符合人体结构及运动学。进入Hypergaph为各个关节设置父子关系和位置,并利用镜像复制出另一侧的关节,以达到人体对称骨骼层次,完成整个人体骨架的建立如图5。

人物模型经过初始建模和骨骼搭建后,需要对其进行蒙皮处理。蒙皮是将骨骼与皮肤和服饰进行绑定的过程[4]。人物皮肤和服饰曲面在动画期间要随骨架运动,蒙皮的自然变形效果非常重要,不能出现凸起、缩进、扭曲。

图5 滑板人物姿态及人体骨架

2.2 角色动作设计

角色的动作动画设计,主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。 关节动画把角色分成若干独立部分,每个部分对应一个网格模型,每个部分的动画被连接成一个整体的动画,角色比较灵活,《Quake2》中就使用了这种动画;单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实;骨骼动画是广泛应用的动画方式,集成了以上两种方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观,皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。

滑板游戏中角色采骨骼动画的方式,现需要对角色进行关键帧设定。动画参数均来源于托尼霍克的的滑板教学视频,对视频中滑板动作进行分解,获取动作的关键步骤,并对人物模型进行关键帧的设置,通过平移和旋转关节和骨骼来实现人物动作的姿态,通过调节时间滑块来设定下一个时间的关键帧。具体步骤如下:

(1)首先新建Canvas对象,创建Text子对象用于演示关键帧添加,创建Image对象做背景;

(2)创建Animation文件后,添加Text的Scale属性,准备为该属性添加动画;

(3)按下录制按钮,在时间条上单击,移动红线,并在左边面板中选中Text,直接在Scene面板中修改Text的尺寸和位置,即添加了一条关键帧,依此类推,将关键帧动画设置完整。

游戏系统中的滑行、跳跃、左右倾斜和刹车的动作都是通过关键帧动画制作的,并采用特定的插值方法计算得到。通过实验证明,贝塞尔曲线插值得到的动画效果比较自然逼真。

在此需要注意的是,在导入动画时,要选中嵌入媒体,将包含人物皮肤贴图的动画一并导入到fbx文件之中。

关键帧动画制作效果如图6。

图6 关键帧动画

2.3 游戏控制设计

游戏的控制模块分为三部分,分别是碰撞检测控制、移动控制和动作控制。

(1)碰撞检测控制。碰撞检测在3D游戏中至关重要,碰撞检测要求角色在场景中可以平滑移动,但对于障碍物的高度可以自行判断是否能通过,在各种前进方向被挡住的情况下都要尽可能的让人物沿着合理的方向滑动而不是被迫停下。在满足这些要求的同时还要做到足够的精确和稳定,防止人物在特殊的情况下掉出场景。

(2)移动控制。人物及场景的移动控制主要用来控制人物与摄像机的移动,以及控制动画的播放。

在人物运动时,需要符合现实世界运动的物理定律,具体做法如下:当玩家按下前进键,脚本将控制播放人物角色的脚部滑动地面的动画,同时也给人物和滑板一个整体向前的力,这个力的持续时间是游戏角色的脚部与地面产生滑动的时间。因滑板的移动属于滚动摩擦,人物在前进之后由于摩擦力的作用速度会缓缓降低,这所有的物理计算都是在Unity内部实现的,需要设置恰当的参数。其他动作也用同样方式实现。具体的参数设定方式如下:

滚动摩擦WheelCollider主要是forward和sideway中的五个参数。forward的前后移动参数是motorTorque和brakeTorque。Sideway的转向参数即为脚本中的steerAngle。其余两个是摩擦力(Stiffness)的控制功能,即地面摩擦力的设置,其中Extremum是控制角色刚刚开始起步,Asymptote控制角色匀速滑行。举个例子,刚开始滑行的时候需要用力地蹬,而两只脚猜到滑板上后速度一段时间内比较均匀,而Extremum是起步时的参数,Asymptote是匀速参数。slip和Value是控制起步和匀速的位置和摩擦力乘数,slip是控制“什么程度才开始进入匀速”,而Value就是分别控制起步和匀速状态时的摩擦力程度。

在键盘监听方面,为了保证动作的流畅性,在播放一个动画时不允许下一个动画打断正在播放的动画,如在跳跃动画播放时,玩家又按下后退键,但此时不可以播放刹车动画。

(3)动作控制。动作控制是通过对导入的动作动画文件的控制来实现的。对于导入的fbx动画文件有特殊的命名要求,对于一个游戏角色的动作动画文件,必须将文件名设定为“角色名@动作名”,这样导入到Unity3D中才能集成到一个游戏角色上,因此多个独立的动作动画文件将汇集成一个组合,并体现在一个游戏角色上。在Unity3D中调用时,利用对动画文件的时间分割,将文件划分成若干相应的动画片段。

3 实现及优化

3.1 人物模型的优化

因为蒙皮的效果对游戏的呈现效果有直接影响,因此本游戏系统采用Maya工具对人物骨骼进行蒙皮,使用平滑绑定方法绑定骨架,具体过程如下:

(1)选中整个人物模型和人体骨架,通过蒙皮调节影响因子进行骨骼初步绑定。

(2)利用蒙皮透明度和X射线调节人物手部、腿部姿势检查关节弯曲位置的蒙皮,若有变形则利用蒙皮权重工具修改蒙皮权重。

(3)通过对人物着色检查,针对不均匀权重所带来的斑点灰色处,利用权重锤以及权重笔进行平均化并快速展平区域,同时检查相邻顶点权重值并将相同权重值应用于选定顶点以达到人体自然的效果。

3.2 角色控制设计优化

滑板游戏与其他运动类游戏不同,游戏中的主体是人物和滑板,不能像一般的赛车类游戏一样,将角色看成一个整体,即人物有人物的动作,滑板有滑板的轨迹,如何设置二者的关系成了一个难题。本文的解决办法是——将滑板和人物看作一个整体。

要将人物和滑板看成一个整体,需要设置以下内容:人物做出一种动作时,滑板也就做出相应的动作,无需脚本来控制,需将人物和滑板作为一个整体导入Maya,并将其看作一个对象来制作动画,这样人物和滑板就不会发生相对位移。基于此,需对角色的控制模块进一步优化。

3.2.1 碰撞检测控制优化

将在Maya中制作完成的动画导入Unity3D中,设置碰撞盒子。由于在滑板游戏中,人物和滑板的运动主要考虑两种类型的碰撞:物体与物体的碰撞和物体与地面的摩擦,因此滑板游戏的碰撞检测策略主要有两种:

(1)对碰撞的准确度要求不高时,可以选择Box Collider,由于人体的横截面没有滑板的面积大,因此只在滑板上添加Box Collider,而人物模型上添加Capsule Collider。

(2)在人物与滑板整体运动时,发生的摩擦只是滑板与地面之间的摩擦。而滑板与地面的摩擦是轮子与地面产生的滚动摩擦,在滑板的四个轮子上分别添加Wheel Collider,按照起步和匀速参数,将四个轮子的参数设置一致。

以上碰撞策略通过系统实现表明,人物在游戏中的运动就会很自然。

3.2.2 动作控制优化

Unity3D中的Animator Controller动画控制器规范角色动画的行为,游戏中的游戏角色被赋予了多组动画。利用脚本,通过指令来调用动画文件,动画文件的生成对应一个animator。游戏中将stand(站立)动画设置为所有动画的落脚点,所有动画都从站立动画开始,比如从站立到跳跃,再从跳跃到站立,再进行下一个动作。

在animator中为了组合动作和方便动作的重复利用,需添加默认播放动作,这里将stand做为整个动画系统的默认播放动作。其他动画的编辑都是在stand基础上触发得到,例如:跳跃、左倾、右倾动作都从站立动作开始如图7。

图7 动画之间的关系

4 结 语

本文介绍了制作滑板游戏的技术及设计方法,针对游戏的开发流程,分别对三维模型构建、动作和控制三个部分的关键技术进行了详细介绍。提出了盘山公路场景的快速生成方法,以及适合于滑板游戏的碰撞检测策略,并根据游戏需要制作相应的动作控制动画,保证游戏的真实及连贯性。本文制作3D滑板游戏的方法可供小型3D运动竞技类游戏参考。

[1] 韩瑞凯,池建斌.基于Unity3D的凸轮机构虚拟设计与仿真研究[J]. 石家庄铁道大学学报(自然科学版), 2015, 28(4):81-86.

[2] 刘柱,刘瑾. 虚拟校园的设计和实现[J].华东师范大学学报(自然科学版), 2015(S1):352-359.

[3] KENNY R. How to Cheat in Maya 2014: Tools & Techniques for Character Animation[M]. England and Wales:Focal Press,2013,109-137.

[4] ANDREW G. 3ds Max Modeling for Games: Insider's Guide to Game Character, Vehicle, and Environment Modeling[M]. England and Wales:Focal Press, 2008.10:121-145.

猜你喜欢
关键帧滑板动画
做个动画给你看
动画发展史
我的动画梦
快乐滑板
基于改进关键帧选择的RGB-D SLAM算法
湖上的滑板
滑板改造记
去玩滑板
基于相关系数的道路监控视频关键帧提取算法
我是动画迷