基于Unity3D的3D跑酷类游戏的设计与实现.docx

上传人:b****6 文档编号:7951135 上传时间:2023-01-27 格式:DOCX 页数:28 大小:305.37KB
下载 相关 举报
基于Unity3D的3D跑酷类游戏的设计与实现.docx_第1页
第1页 / 共28页
基于Unity3D的3D跑酷类游戏的设计与实现.docx_第2页
第2页 / 共28页
基于Unity3D的3D跑酷类游戏的设计与实现.docx_第3页
第3页 / 共28页
基于Unity3D的3D跑酷类游戏的设计与实现.docx_第4页
第4页 / 共28页
基于Unity3D的3D跑酷类游戏的设计与实现.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

基于Unity3D的3D跑酷类游戏的设计与实现.docx

《基于Unity3D的3D跑酷类游戏的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Unity3D的3D跑酷类游戏的设计与实现.docx(28页珍藏版)》请在冰豆网上搜索。

基于Unity3D的3D跑酷类游戏的设计与实现.docx

基于Unity3D的3D跑酷类游戏的设计与实现

摘要

本作品是基于unity3D的一款3D跑酷类游戏,以已有的跑酷类游戏为模版,结合我所学到的知识综合而成,应用名为RunningMr.Z。

酷跑类游戏以其简易的操作方式和华丽的游戏场景,常年占据手机APP和电脑软件下载量的领先地位。

经过分析,我发现酷跑类游戏逻辑结构分明,相对于其他游戏实现起来也容易不少,于是结合自身所学,使用Unity3D和3DMAX等开发引擎,进行游戏的设计。

关键词:

3D;酷跑类游戏;Unity3D;3DMax

 

Abstract

Thisworkisbasedontheunity3Dofa3DParkourgame,themarkethasbeenParkourgameasatemplate,combinedwiththeknowledgeIhavelearnedfromtheapplicationcalledRunningMr.Z.Coolrunninggamewithitssimplemodeofoperationandgorgeousgamescene,perennialoccupytheleadingpositioninthemobilephoneAPPandcomputersoftwaredownloads.Afteranalysis,Ifoundthecoolrunninggamelogicstructureclear,comparedtoothergamesitisalsomucheasier,andcombinedwiththeirownlearning,usingUnity3Dand3DMAXdevelopmentengine,gamedesign.

Keywords:

3D;Coolrunninggame;Unity3D;3Dmax

 

 

1、引言

1.1、开发背景

时代总是变迁的很快,许多的电子产品也在随着时代飞速的发展着,绽放蓬勃的生命力。

出现的第一代计算机刷新了当时人们的视野,而后计算机在不断的更新换代,逐渐的占据了人们的世界,紧随着便是手机的出现,从最早的大哥大到现在的触屏智能手机。

随着网络的兴起、手机硬件性能的提升,手机网络游戏也越来越多,用户利用网络可以进行联机游戏,同自己的好友共同游戏享受乐趣[1]。

随着数字化信息技术和网络技术的发展,传统的电子游戏也受到了颠覆性的影响[2]。

对于游戏开发者来说,这是最好的时代[3]。

虽然这是十分适合游戏开发的时代,但依然存在着许多限制的条件,比如游戏开发的时间过久从而导致上市时间已与人们对游戏需求的时间脱节,这不仅将导致游戏本身价值的贬值,也将给开发团队带来巨大的损失。

所以能够快速的开发出一款既吻合大众口味的又能给公司带来收益的游戏是当前最急需解决的问题。

这个问题并不需要大家担心太久,因为程序员们又创造了奇迹,一款款的游戏引擎像小鱼儿吐泡泡一般冒了出来。

根本的问题得到了良好的解决,开发者们真正可以大展身手的机会已经摆在面前了。

1.2、游戏介绍

《RunningMr.Z》是一款跑酷类的游戏,在现下这个充斥着各式各样或奇怪的或正常的甚至与认知相悖的游戏的世界里,跑酷类的游戏受到了玩家们的支持。

跑酷类游戏是根据现实中的一种跑酷运动进行改变整合而后开发出来的,这是为了满足那些无法亲自体会跑酷运动带来的刺激感的玩家们的需求。

跑酷运动具有一定的危险性,并不适合绝大多数的人们,但跑酷游戏的出现就解决了这一尴尬的境地。

在跑酷类的游戏当中,3D类型的场景是最受各界玩家热衷的追捧的。

3D的形式本身能让人们产生身临其境的感觉,加上是刺激的跑酷游戏,这无形中又为3D跑酷游戏加分了不少。

跑酷类游戏的操作十分简单,只需使用左右键让角色左右移动,用上键控制跳跃,用下键控制下蹲,角色会根据键盘输入做出相应的动作,以躲避障碍,触碰跳板,捡取金币或者道具。

当玩家碰到障碍时,游戏就失败,若玩家不能够支付钻石以继续游戏,则开始计算得分。

游戏过程中吃到的钻石可在游戏的道具菜单中购买加成的装备或者道具。

当然除了这些基本的功能之外,还有设定一些小细节,比如角色的跳跃次数被限定为一次最多连续跳起两次,因为如果角色可以无限次的跳跃的话,这个游戏将失去玩乐的意义。

在现实的跑酷运动中,人们本身便很难做到梁旭跳跃两次,在游戏中设置连续跳跃两次已经是极大的让步。

游戏流程设计如图1-1所示[3]:

图1-1游戏流程设计

1.3、开发流程介绍

在游戏开发中会根据使用的引擎进行流程的分析,而在《RunningMr.Z》中使用的引擎是Unity3D。

简单实用、免费、开源[4]。

基于Unity的手机游戏开发,手机游戏主要包含主屏幕滑屏,界面刷新,技能成长系统,虚拟杆控制,场景技能释放,怪物AI设计等多大功能模块设计,实现并开发游戏[5]。

 

开发流程图如图1-2所示:

图1-2开发流程图

1.4、课程研究意义

在开发的过程中,我学到了不少关于开发的技巧和开发的经验,也结识到了许多很有实力的学长学姐,在将来的职场中和生活中必定受益匪浅。

作为一个近乎零基础的开发学员,每一个游戏项目的经验都是十分值得珍惜的,做成一个成品的项目,胜过读一年的书。

实践的项目经验,所得到的经验技巧和人缘,是书本万万学不到的。

经过对这一课程的学习,我对编程方面和项目代码整合以及项目的各方面整合加深了不少的印象和经验,在今后的职场生活中是一定能够用得到的。

 

2、关键技术概述

2.1、Unity3d游戏引擎及NGUI插件介绍

2.1.1、Unity3d游戏引擎简介

Unity3D是由UnityTechnologies开发的一款3D跨平台次世代游戏引擎,Unity3D使得开发人员可专注于游戏的设计而忽略底层的技术实现,从而达到快速开发的目的[6]。

Unity3D是一款支持跨平台发布的游戏引擎,支持的平台包括Web,MAC,PC、IOS、Android、PhyStation3、xbox360、WindowsStore、WindowsPhone、Blackberryl0、PlayStation4等几乎所有主流游戏平台[7]。

并且这一款游戏引擎之所以那么受欢迎,还有一方面的原因是它自身的开发速度是同种游戏引擎中最快的,能力是是非的强大,适用于C#,JavaScript,Boo等主流的脚本语言,兼容三维画面美化所需要的美术资源文件格式,其内嵌了动画、粒了、寻路等了系统使其可以进行各种图形渲染[8]。

2.1.2、NGUI界面开发插件介绍

使用Unity3D开发游戏的人员都知道,在这款引擎当中有一款用于界面开发的插件的需求是十分的火热,而这款NGUI界面开发插件是Unity3D资源商城目前最火的界面开发插件,严格遵循KISS原则,使用C#语言开发,代码大多数不超过200行,达到的效果尽如人意,而且在最大程度上配合程序员,可供他们扩展和修改[6]。

在具体实现时,需要先使用图形处理工具来制作需要的图片,再利用NGUI中的AtlasMaker制作图集,然后在UI中生成Sprite精灵,调整其大小和位置并进行九宫格切割[9]。

2.2、Unity3d游戏引擎的特点

Unity3D是一款分层级的全面的游戏开发引擎,它的场景编辑功能可视化,可以通过直观的场景显示来正确、高效的完成场景编辑;每一个控件、对象都可以通过属性编辑面板来进行定制化;并可以实时预览所创建的场景[10]。

其特点主要有:

图形动力:

带有设计制作游戏过程中所需要的一些用于渲染的组件和处理色彩的脚本等[6]。

可视化开发环境:

在程序员编写脚本的时候可以通过可见的环境去看看自己所设计的成果的呈现状态,并可以进行实时的修改,是很方便的一个功能[6]。

导入便捷:

在这款引擎当中开发者可以直接将美术制作出得物体模型或动画等采取直接导入的方式,并且不用担心美术部分的贴图材质等会因此而产生改变等情况[6]。

物理上的仿真形式:

这款引擎上整合了物理方面需要用到的引擎系统,并附带有一些经常会用到的物理方面的组件,像碰撞器之类的[6]。

可以跨多种平台发布游戏:

Unity3D中几乎涵盖了所有的可以发布游戏的主流的平台[6]。

资源可共享:

开发者可以上网上商城对一些自己需要的游戏源码、模型或资源进行购买,实现游戏资源的复用。

性能分析器:

为了方便程序员进行性能分析,在引擎中还带有一款分析器能够在编辑器中或可以通过直接连线设备进行分析,十分的便捷[6]。

3、需求分析

3.1、概要描述

3.1.1、游戏类型

RunningMr.Z是一款单机的3D跑酷类游戏,是以第三人称的视角进行游戏的向前奔跑。

游戏中的场景是一个树林,玩家控制游戏人物通过奔跑跳跃和下蹲来躲避路途中的树枝、吊桥等障碍物,以及捡取钻石和磁铁、护盾、飞行器等道具。

玩游戏时不需要联网,直接用电脑开启游戏即可运行。

3.1.2、游戏运行的要求及针对的市场

RunningMr.Z是一款单机游戏,故而对网络没有要求,因其是一款小型游戏,故对电脑的配置无明显要求。

该游戏主要针对的市场为儿童、青年以及老年的各年龄段拥有设备的可玩游戏的人群,而我的游戏希望能够面向各年龄段的人们,所以需要考虑到各个年龄段不同玩家的共同需求。

3.2、游戏的功能需求

3.2.1、游戏元素

本款游戏中的游戏元素包含奔跑的主角Mr.Z,障碍物,钻石以及计分系统。

该游戏为3D跑酷类游戏,玩家通过第三人称是视角控制奔跑中的游戏角色进行障碍物的躲避,并对奔跑路途中的金币进行吸食,从而在关卡末进行得分统计。

3.2.2、游戏功能

在人类世界中可以进行的运动可以使多种多样的,而在游戏世界中的动作主要分为两种:

循环动作和非循环动作,循环动作指的是角色的走跑一类的基本动作;非循环动作指的是动作在做出反馈时只需要一次播放的动作[11]。

在游戏当中,角色在一开始就被赋予一直向前奔跑的能力,而玩家只要对角色进行跳跃、向左向右以及蹲下的操作就可以了,并通过这些操作来躲避障碍完成游戏。

我们使用编辑脚本实现人物的移动的控制[12]。

游戏中除了奔跑和跳跃的基本功能外,还有钻石的吸食和消失,得分的计算,每一段跑道之间的衔接,游戏的暂停与继续等。

场景中的所有虚拟物体都由Unity3D的场景编辑管理[13]。

这是一款跑酷类游戏,玩家控制角色的动作,所以在功能需求这方面我们需要满足角色能进行的基本操作。

在游戏开始时自动设置为角色自主的向前奔跑,需要进行跳跃操作和左右躲避以及下蹲操作来躲避路上碰到的障碍物。

为了游戏的可玩性,增加一定的难度,在跳跃次数上需要进行限制,单次跳跃未落地前不可再次跳起。

游戏中可以看到玩家控制的主角在不停地移动,而游戏背景总是在向下移动,让玩家感觉整个画面都在移动,呈现一种动态的视觉效果[14]。

每一款游戏都是需要一个界面对玩家进行引导,而界面的精美程度是对玩家最直接的吸引,而界面功能更加的简洁明了更能方便广大玩家,所以游戏对界面也是要求多多。

在游戏中设置一个关卡,整个地图呈S型前进。

关卡中的每一段进行道路、障碍物以及钻石上位置的调整,每一个道具都设置碰撞器或者触发器,利于游戏过程的真实性。

而这些触发器之类的能够跳动后台做出相应的指令,比如游戏的结束,游戏的暂停,游戏的金币捡取量,游戏的得分等等。

实践中,需要为道具添加刚体组件,使其在物理引擎的作用下模拟运动,通过AddForce()和AddTorque()分别添加抛力与转动力,即可使刚体得到符合现实的运动[15]。

游戏中设置很多处碰撞器和触发器,如:

钻石和道具上挂载了触发器,玩家控制游戏角色进入了钻石和道具的触发器时,钻石的数量会+1,若是道具则会触发道具的效果。

并且触发销毁的效果,即钻石和道具等在玩家触碰到的时候会自动销毁。

障碍物上有碰撞器,在游戏角色触碰到碰撞器时,激活碰撞器上挂载的代码,使游戏暂停并弹出窗口询问玩家是否使用钻石复活,若是则扣除一定量钻石并继续游戏,若否则游戏结束计算分数。

在关卡末端有一个挂载在空物体上的触发器,玩家是看不见实体的,当玩家控制游戏角色穿过该触发器时,游戏结束,也就是游戏通关,计算分数。

在游戏过程中吃到的钻石会进行累加,并且会一直记录,吃到的钻石可以在商店中购买游戏角色、加成道具等。

就游戏而言,执行速度是重要指标,因为十分精确的碰撞检测很耗时[16]。

4、游戏实现

4.1、游戏菜单的实现

4.1.1、3D菜单实现

3D菜单是通过GUI插件技术,将想要显示的菜单功能挂载在一个面板上,赋予分别它们功能,再使用摄像机对准菜单面板,当条件激活到菜单时,激活摄像机,讲菜单上的小部件投射到玩家眼前,以供玩家选择,如继续游戏和结束游戏退出游戏等。

还有一种3D菜单是一直显示在玩家眼前的,那就是分数计算菜单和钻石数量计算菜单,它们实时计算分数和捡取到的钻石的数量,以最直接最直观的方式展示给玩家。

3D菜单主要是用于控制游戏中的开始、暂停、继续,以及显示游戏中所得到的分数和玩家吃到的金币总和。

3D菜单用例表如表4-1:

表4-13D菜单用例表

4.1.2、2D菜单实现

对于2D菜单的实现,我使用的是UGUI组件,主要是设计菜单界面,按钮以及音量调节的滑动条,经过一定的布局展示给玩家,2D菜单详细层次结构图如图4-2:

图4-22D菜单详细层次结构图

2D菜单各个场景中的出现的类与方法的结构图如下图:

图4-3CoverButtonclick类与方法的结构图

图4-4MainMenuButtonClick类与方法的结构图

图4-5IntroductionButtonClick类与方法的结构图

图4-6ScoreButtonClick类与方法的结构图

图4-7SettingButtonClick类与方法的结构图

图4-8Shop1ButtonClick类与方法的结构图

2D菜单用例表如表4-9:

表4-92D菜单用例表

菜单名称

菜单描述

菜单用例

Shuomingcaidan

说明菜单

1-1玩家进入说明菜单,查看游戏说明

Xitongcaidan

系统菜单

2-1玩家进入系统菜单,调节音乐音量

2-2玩家进入菜单,点击意见反馈按钮可链接一个地址进行意见反馈

Youxicaidan

入口菜单

3-1玩家进入游戏菜单,点击游戏开始按钮

3-2玩家进入游戏菜单,点击查看说明菜单

3-3玩家进入游戏菜单,点击查看商店菜单

3-4玩家进入入口菜单,点击查看最高得分

3-5玩家进入入口菜单,点击查看系统菜单

Shangdiancaidan

商店菜单

4-1玩家进入商店菜单,点击角色购买按钮,查看可购买的人物角色

4-2玩家进入商店菜单,点击道具按钮,查看道具种类以及进行道具属性加强操作

4.2、游戏逻辑实现

游戏中的不同脚本有时候控制不同的游戏对象,有时候控制相同的游戏对象,所以我们把一个脚本就当成一个类来看待。

此游戏中总共有qwer类、stop类、turn类、daojuxuanzhuan类、tanhui类、道具类、xiaohui类和摄像机控制类这8大类;而道具类中又分为citie类、hudun类、feixingqi类等。

脚本的执行顺序,也就是Unity的生命周期,如图4-10所示:

图4-10unity的生命周期图

 

5、详细设计

5.1、qwer类(主要类)

qwer类的类图如图5-1所示:

图5-1qwer类类图

该类主要负责游戏角色的一系列动作,摄像机运动的控制以及计分系统。

Jumptime:

double类型。

控制一段跳跃与下一段跳跃之间的时间间隔,避免发生连跳事件或者游戏角色未落地就再次跳起事件。

HasEnject:

bool类型。

识别起跳后经过的时间是否已经大于jumptime设定的时间,如果大于,即可再次跳起,如果小于,则说明时间间隔还未到,无论按几次上键都无法跳起。

LastTime:

datetime类型。

用于识别到当前时间和起跳时间之间的差距,以确认该段时间是否已经大于jumptime中设定的时间。

Speed:

float类型。

当游戏开始时游戏角色运动的初始速度。

Jiasu:

float类型。

游戏角色向前运动的全程是一个匀加速的运动,此元素控制其加速度大小。

Timespend:

float类型。

用于识别从开始到结束游戏角色总共运行的时间,以用来统计最后的分数。

S:

float类型。

分数计算。

由速度和花费时间的乘积以及拾取到宝石的个数所决定。

Qiu:

GameObject类型。

游戏角色,初期用球代替,故起名为球。

Ditu:

GameObject类型。

游戏地图。

Cam:

GameObject类型。

主摄像机,跟随人物向前运动。

Cam2:

GameObject类型。

第二摄像机,在游戏开始前绕着龙旋转一周后停止使用。

Dragon:

GameObject类型。

龙,用于游戏效果。

OnGUI:

GUI界面。

显示在游戏的右上角,让玩家能够清晰的了解到自己所得的分数。

主要负责控制游戏角色的动作

a)人物自动向前做匀加速运动。

游戏运行时{

游戏开始;

人物.transform.Translate(向前,速度);

速度+=time.timescale;//速度随着时间增加

}

b)人物的左、右、跳、蹲。

当按上下左右方向键时{

识别玩家按下什么方向键;

人物.transform.Translate(跳/蹲/左/右,速度);

}

c)跳起时可按蹲下快速落地。

跳起时按住下键{

人物.transform.Translate(向下,两倍速度);

 

5.2、stop类

stop类的类图如图5-2所示:

图5-2stop类类图

用于控制当游戏角色碰撞到障碍物时暂停游戏,以及当游戏暂停时按空格按键继续游戏。

该类中的主要元素

OnTriggerEnter:

是对游戏角色是否进入障碍物触发器的识别。

主要负责游戏的开始和暂停

点击运行按钮游戏自动开始。

a)碰到障碍物时暂停游戏。

碰到物体时{

识别该物体是否为障碍物;

如果是,Time.timeScale=0;

}

b)暂停游戏时按空格键继续游戏。

暂停时当按下空格时{

识别游戏角色是否在运动中;

如果否,Time.timeScale=1;

如果是,则对游戏运行无影响;

}

c)障碍物有触发器,当碰到障碍物时人物和摄像机停止运动。

当人物进入触发器{

Time.timescale=0;//暂停游戏

5.3、turn类

该类主要控制游戏角色运行到一条直线道路的尽头时,既角色进入触发器时,使角色和摄像机同时绕着角色向相同方向旋转90度。

Turn类类图如图5-3所示

图5-3turn类类图

该类中的主要元素

OnTriggerEnter:

是对游戏角色是否进入弯道触发器的识别。

Leftturn类和rightturn类:

继承于turn类,完成左转或者右转的动作。

因为道路分为左转和右转的区别,故编写两个类来区别。

Leftturn类和rightturn类类图如图5-4所示

图5-4Leftturn类和rightturn类

主要负责让游戏角色转弯

a)在一条直线道路的尽头有一个触发器,触发时将人物和摄像机转弯。

当人物进入触发器{

人物和摄像机分别绕着人物向左/向右旋转90度;

5.4、tanhui类

tanhui类的类图如图5-6所示:

图5-5tanhui类类图

该类主要用于当游戏角色运动到跑道外时,自动将角色弹回到赛道内,以防止角色在跑道外继续运动从而引发错误。

该类中的主要元素

OnTriggerEnter:

是对游戏角色是否进入跑道外的触发器的识别。

图5-6Xiangzuotan类和xiangyoutan类类图

Xiangzuotan类和xiangyoutan类:

继承于tanhui类,完成向左弹回或者向右弹回的动作。

因为道路有左右两边可以超出,向左超出赛道和向右超出赛道的弹回方向不同,故编写两个类来区别。

Xiangzuotan类和xiangyoutan类如图5-7所示

主要负责保持游戏角色始终在跑道内

a)在一条直线道路的尽头有一个触发器,触发时将人物和摄像机转弯。

当人物进入触发器{

人物和摄像机分别绕着人物向左/向右旋转90度;

5.5、baoshi类

(1)baoshi类

baoshi类类图如图5-7所示

图5-7baoshi类类图

该类是跑道上的宝石所挂载的类,用于识别当宝石被游戏角色碰撞时,自动在宝石总数上加一。

该类的主要元素:

J:

int类型。

宝石总数。

当识别到角色与宝石发生碰撞(其实是触发)时,在宝石总数上加上一。

Bao:

GameObject类型。

用于和场景中的宝石相关联。

OnTriggerEnter:

是对游戏角色是否与宝石的触发器发生触发的识别。

OnGUI:

GUI界面。

显示在游戏的右上角,让玩家能够清晰的知道自己所得到的宝石和宝石总数。

主要负责宝石捡取和统计

a)在游戏运行中,道路上会出现钻石,收集到的钻石可购买道具或者复活角色。

钻石在碰到角色时自动销毁。

当人物碰到钻石的触发器时{

钻石总数+1;

销毁自己;

(2)citie类

citie类类图如图5-8所示

图5-8citie类类图

该类主要挂载在磁铁道具上,用于识别当角色碰撞到磁铁道具时,附近的宝石将会以一定速度向游戏角色靠近兵被拾取,持续一段时间或一段距离。

该类中的元素:

Dis:

float类型。

识别角色和宝石之间的距离,当距离小于20单位长度时,宝石将自动向游戏角色靠拢。

Wuti:

GameObject类型。

此物体即游戏角色。

用于当游戏角色吃到磁铁时,把宝石的位置减去角色当前位置,得到一个向量,而宝石将沿着这个向量向游戏人物靠拢,以防止宝石跑偏。

主要负责磁铁道具捡取和使用

a)吃到磁铁时,前方一段距离的钻石会朝你的方向飞来。

磁铁在碰到角色时自动销毁。

用Vector3.Distance识别人物与钻石之间的距离

当距离<20时{

钻石顺着钻石-人物的position的方向向人物飞来;

当人物碰到磁铁时{

磁铁销毁自己

(3)hudun类

hudun类类图如图5-10所示

图5-10hudun类类图

该类主要挂载在护盾道具上,用于识别当角色碰撞到护盾道具时,后方一段距离内所有障碍物的触发器失效,即角色碰撞到障碍物时可以穿过而不是被暂停住。

主要负责护盾道具的捡取和使用

a)吃到护盾时,将持续一段时间的无敌,及碰到障碍物时可直接穿过。

护盾在碰到角色时自动销毁。

当人物吃到护盾时{

后面一段距离内的障碍物的刚体失去作用;

护盾销毁自己;

feixingqi类

feixingqi类类图如图5-11所示

图5-11feixingqi类类图

该类主要挂载在飞行器道具上,用于识别当角色碰撞到飞行器道具时,角色向上空移动一段距离,加速移动,并且拥有citie类的功能。

该类的元素:

Dis:

与citie类相同。

Wuti:

与citie类相同。

Jiasu:

float类型。

设定一个加速度,当游戏角色吃到飞行器道具时,向上空移动一段距离后加速移动的加速度。

主要负责飞行器道

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1