窦杨辉+王巍+何鑫+毛文泰
摘 要: 介绍了基于Unity游戏引擎实现的校园主题的3D跑酷类游戏开发过程,Unity是一款跨平台的游戏引擎,基于该引擎可以很便捷的开发出适合多种平台运行的游戏。游戏开发过程包括场景搭建、人物创建、游戏脚本及逻辑实现,游戏逻辑部分对碰撞检测算法进行了详细的描述。实验结果表明,研究实现的第三人称视角跑酷游戏,用户体验好,校园主题贴近生活,能够为玩家带来不同于其他游戏的感受。
关键词: Unity游戏引擎; 跑酷游戏; 3D游戏; 碰撞检测
中图分类号:TP399 文献标志码:A 文章编号:1006-8228(2017)03-52-03
Abstract: The campus theme 3D Parkour game development process based on Unity is described. The Unity game engine is a cross platform game engine can be used to conveniently develop games on a variety of platforms. Game design includes scene building, character creation, game scripts and logic processing. The collision detection algorithm is introduced in the part of game logic. The experimental results show that the novel third person view Parkour game researched in this paper has good user experience, and the new game theme of campus life can bring game experience different from other games' to the game players.
Key words: Unity game engine; Parkour game; 3D game; collision detection
0 引言
近年来移动通信网络技术飞速发展,越来越多的人通过智能手机利用碎片化的时间来玩休闲类游戏,寻找乐趣放松心情,于是手游行业得到了快速的发展,其中跑酷类游戏因为其诸多优点而深受大众喜爱。例如最近几年来非常流行的跑酷类游戏就有Temple Run、Subway Surfers等。本文主要介绍利用Unity3D游戏引擎来开发一款休闲跑酷类游戏,以及利用Unity3D游戏引擎将游戏发布到Android平台上。
1 Unity游戏引擎介绍
Unity3D是Unity Technologies公司开发的专业游戏引擎。它能够让游戏开发者轻松创建出2D游戏、3D游戏,以及实现建筑可视化、实时三维动画等,其具有强大的跨平台性[1]。因为这些诸多优点,使得越来越多的游戏开发人员选择Unity3D游戏引擎。
2 校园跑酷游戏设计与实现
2.1 游戏开发前的准备工作
2.1.1 游戏类型
本游戏采用Unity3D游戏引擎为开发工具,采用C#脚本语言作为开发语言,通过智能手机的触摸技术而实现第三人称酷跑类游戏。
2.1.2 运行的平台
本游戏可以运行在win7及以上系统平台和Android2.0及以上系统平台。
2.1.3 操作方式
校园跑酷游戏是一款操作简单的游戏,在手机端需要在手机屏幕上下左右滑动就能控制游戏角色躲避障碍物,在PC端是通过鼠标的上下左右滑动控制角色,在游戏中角色会一直沿着设计好的路线自动跑动,玩家只需要控制躲避障碍物即可,如果在跑動过程中撞到障碍物,玩家死亡游戏结束。
2.2 游戏设计
游戏的场景设计方面,采用的是大连民族大学的校园环境,在跑酷路线和场景的渲染上和学校的真实环境相似度很高,同时在障碍物的选择上也和真实生活息息相关,比如没有井盖的陷阱等。而我们选用的游戏角色则是一个将要迟到的大学生,游戏创意符合校园的气息。游戏的设计整体思路如下。
首先准备游戏素材,校园内的各种场景和障碍物模型等素材都是通过3D Max这款美工软件制作出来的,也包括一些元素图片。其中游戏角色的制作会相对困难一些,然后把这些制作好的素材直接导入到Unity中就可以使用。
2.2.1 游戏场景搭建
游戏场景主要是对游戏地图、灯光等环境因素进行设置。游戏中可以包括多个场景,每个场景内元素的风格要统一。
⑴ 新建一个场景。
⑵ 导入资源。将游戏准备好的材质、贴图、模型等资源导入到Project面板下的资源Assets文件夹中。
⑶ 设置环境光和创建光源。
⑷ 在场景中摆放模型。
⑸ 添加天空盒。
至此,基本的游戏场景搭建完毕。
2.2.2 游戏脚本及逻辑的实现
游戏脚本对于一款游戏来说是灵魂部分,所以游戏脚本的编写至关重要。下面将具体介绍关于游戏脚本和逻辑方面的实现。
⑴ 主摄像机的设置及脚本开发
主摄像机脚本开发的主要功能是呈现主界面以及在各个界面直接进行跳转。下面是具体实现步骤。
① 在“Assets”文件夹中点击“Create”选项下的“C# Script”创建脚本,命名为“Welcome”。
② 双击脚本,进入“MonoDevelop”编辑器中,开始编辑脚本,此脚本主要完成界面的搭建以及向各个界面的跳转。“MonoDevelop”编辑器是Unity3D游戏引擎集成的编辑器,它支持使用C#、Javascript和Boo语言开发[2]。
③ 当脚本编写完成后,将它拖到Main Camera组件上,完成主摄像机脚本的绑定。
⑵ 人物角色的创建及脚本的开发
人物角色对于一个游戏项目来说是至关重要的,没有人物,游戏就只有一个空壳,所以人物的创建和人物行为的设计是游戏开发的核心。
人物的创建分为两个部分,一部分是人物移动的逻辑编写,另一个部分是人物动作跟随人物移动的播放。其具体实现方式如下。
① 首先是人物移动的逻辑实现。人物分为跑步、左移、右移、跳跃、下滑、倒下六个动作。
跑步的实现较简单,思路如下:给定一个初始方向,初始速度,然后结合人物的动作进行跑步。
左移和右移的动作比较复杂一些,因为这两个动作需要计算鼠标或手指从开始点击(手机系统是开始触摸)到鼠标、手指抬起的距离。根据距离的不同,来判断人物是左移还是右移。
跳跃动作实现的思路是当鼠标或手指向屏幕上方滑动时,计算这段点击(触摸)和抬起的距离,当距离大于设定的一个阈值时,让人物进行跳跃动作。代码如下:
if (Mathf.Abs(touchOffset.x) && touchOffset.y>0) { if (isJumping==false) { isJumping=true; isUp=true; haveJumpHeight=0; } return TouchDir.Top; } 同理,下滑的动作也是类似实现,不同的检测算法是在于此时,人物向屏幕的下方滑动。 倒下的动作比较简单,先判断人物角色是否碰到障碍物,如果是,那么就执行倒下的动作。 ② 人物动作的实现技术。 Unity引擎经过多个版本的发展,其动画系统也做了很大的改变。动画系统是Unity引擎的特色之处。在Unity4.0版本以后出现了新的Mecanim动画系统,由于使用Mecanim动画系统,需要美工人员专业的动作配合,所以本游戏开发还是采用以前的动画系统。 Unity3.x版本中播放动画的时候使用Play()或CrossFade(),直接播放动画或淡入淡出播放动画[3]。 animation.Play("name"); animation.CrossFade("name"); 也可以使用队列播放,让动画形成一个队列。 在本游戏中动作的具体实现算法是: 先判断当前的游戏状态,即是哪个动作状态,然后再调用animation.Play(“name”)函数进行相应处理。例 if(animation.isJump) { animation.Play(“Jump”); } 至此,人物角色的创建完成。 ⑶ 各种障碍物添加碰撞器进行碰撞检测 当游戏主角与其他游戏对象GameObject发生碰撞时,需要进行一些特殊事件的处理。比如,在本游戏中,当人物在奔跑的过程中,如果遇到了障碍物,玩家人物就会死亡,游戏结束,这时,我们需要检测到是否有碰撞现象产生,即碰撞检测[4]。 首先,我们要明确产生碰撞信息所需要的条件。事实上,Unity3D集成开发环境中进行碰撞检测的方式有两种,一种是利用碰撞器,另一种是利用触发器。碰撞器的使用方式是将某一类碰撞器加载到游戏对象上,而触发器是一种属性,只需要选中这个属性,即可实现触发器工作。 在本游戏中,运用到碰撞检测的地方有人物角色和各种障碍物。当人物碰到障碍物后发生碰撞检测,然后人物执行倒下的动作,游戏结束。因为在游戏中是通过碰撞障碍物来判断玩家是否死亡的,所以要给每个障碍物和游戏角色分别添加碰撞器,尤其是游戏角色更需要大小两个碰撞器,因为游戏角色在躲避障碍物时有一个滑行的动作,如果这个动作还用大碰撞器的话就会出现错误,所以此处需要一个判断,判断玩家如果当时正在处于滑行动作就启动小碰撞器。 ⑷ 最后就是游戏的发布与打包 配置好Android開发环境后,在Unity开发环境中打开菜单,找到build settings,在发布设置窗口中找到要发布的平台,即Android选项,将涉及到游戏运行的各个场景拖拽进去。再点击按钮即可成功发布[5]。如图1所示。游戏场景的索引值或者是场景在设置中的顺序决定了场景的标识。 3 游戏开发测试 游戏中有三种状态,分别为游戏未开始状态,游戏运行状态,失败状态。游戏主界面,即游戏未开始状态选用的是大连民族大学正门的图片,同时上面的开始游戏按钮可以控制游戏的开始,退出按钮可以控制游戏的退出,而成绩积分等信息由于还没开始游戏,所以暂无数据,如图2所示。 在开始游戏后,由于跑酷类游戏的特点是只要玩家不触碰障碍物就会一直奔跑下去,因此游戏开发过程中涉及到跑道的供给。本游戏提供三条跑道,在跑完一条跑道之后会进行后台的碰撞检测,证明玩家已经通过这条跑道,然后在玩家进入第二条跑道时自动创建第三条跑道,删除第一条跑道,以此类推,始终保持游戏场景中有两条跑道。这样就会给玩家一种无穷无尽的感觉,如图3所示。 4 结束语 本文介绍了基于校园场景的跑酷类游戏的设计与开发过程,包括基于Unity的游戏资源的导入和脚本的挂载,游戏人物的处理,特别是在游戏逻辑方面,我们对玩家动作进行了详尽的处理。游戏运行良好,校园实景的加载是游戏的创新之处。未来工作是优化游戏代码,解决多个模型导入带来的卡顿现象。 参考文献(References): [1] 吴亚峰,杜化美,于复兴.Unity游戏案例开发大全[M].人民邮电出版社,2015. [2] Unity Technologies. Unity官方案例精讲[M].中国铁道出版社,2015. [3] 宣雨松.Unity3D游戏开发[M].人民邮电出版社,2012. [4] 林巧民等.3D游戏开发中的碰撞检测算法研究[J].计算机技术与发展,2010.20(5):39-42 [5] 陶阳.基于Unity在Android平台上开发游戏的方法[J].电脑编程技巧与维护,2012.19:73-77