Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx

上传人:b****4 文档编号:5239302 上传时间:2022-12-14 格式:DOCX 页数:41 大小:2.04MB
下载 相关 举报
Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx_第1页
第1页 / 共41页
Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx_第2页
第2页 / 共41页
Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx_第3页
第3页 / 共41页
Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx_第4页
第4页 / 共41页
Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx

《Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx(41页珍藏版)》请在冰豆网上搜索。

Unity3D的折叠空间射击类游戏的设计与实现毕业论文.docx

Unity3D的折叠空间射击类游戏的设计与实现毕业论文

---文档均为word文档,下载后可直接编辑使用亦可打印---

摘要

5G时代的到来,必将带动一大部分行业的发展。

而这部分被促进发展的行业中,必定包含VR技术的实现和迭代。

VR的技术除了要处理完整的物理系统外,FPS游戏在VR领域上应该也会大放异彩。

因为第一人称的游戏回给玩家体验到无以伦比的带入感。

除此之外更多的也有对视觉设计的更高需求。

正常直观的视觉效果可能在发展中满足不了大众的需求,所以需要通过更多巧妙的视觉设计来向未来的科技做出准备。

大众需要在错中复杂的视觉中接收新的刺激、新的体验。

这才是未来游戏行业该有的技术准备。

文章中阐述一些关于传送门的技术实现和传送门的设想并实际在游戏中的应用。

涉及的应用方面有:

外观比较短的走廊里面是一条非常长的走廊。

往楼梯下走,到达建筑的顶上等设计。

技术实现方面涉及到了两个摄像机的同步矩阵计算,在编写着色器来完善传送门的效果。

一些常规的游戏开发方面涉及到状态机(FSM)的代码编写风格,统一管理某一模块的代码开发模式等。

关键字:

FPS、传送门、FSM、视觉、着色器

 

Abstract

Theadventofthe5Gerawillinevitablydrivethedevelopmentofmostindustries.AndthispartofthepromotedindustrymustincludetheimplementationanditerationofVRtechnology.InadditiontothetechnologyofVRtodealwiththecompletephysicalsystem,FPSgamesshouldalsoshineinVR.Becausefirst-persongamesgiveplayersanunparalleledsenseofimmersion.Inaddition,thereismoredemandforvisualdesign.Normalandintuitivevisualeffectsmaynotmeettheneedsofthepublicduringdevelopment,somoreclevervisualdesignsareneededtoprepareforfuturetechnology.Thepublicneedstoreceivenewstimuliandnewexperiencesinthewrongandcomplicatedvision.Thisisthetechnicalpreparationforthefuturegameindustry.Thearticleexpoundssometechnicalrealizationsofportalsandtheassumptionsofportalsandtheirpracticalapplicationingames.Theapplicationaspectsinvolvedare:

arelativelyshortcorridorisaverylongcorridor.Godownthestairstothetopdesignofthebuilding.Thetechnicalimplementationinvolvesthecalculationofthesynchronizationmatrixofthetwocameras,andtheshaderiswrittentoimprovetheeffectoftheportal.Someconventionalgamedevelopmentaspectsinvolvethecodewritingstyleofthestatemachine(FSM),thecodedevelopmentmodeforuniformlymanagingacertainmodule,andsoon.

Keywords:

FPS、Portal、FSM、Vision、shader

 

第一章绪论

1.1本课题的研究背景和意义

随着世界电子游戏市场需求的极迅提升,现有不胜枚举的电子游戏开发引擎腾空出世,由旧时年代的Wolfenstein3D、Doom到现时的Unity3D、Unreal,电子游戏开发引擎的急速迭代使游戏开发者及研究人员的开发设计便利性与专业性也在逐步增加[1]。

本次课题项目是利用了计算机脚本语言、Unity3D游戏引擎开发、计算机图形学及游戏人工智能(AI)等相关技术实现基于折叠空间理论场景的第一人称射击单机游戏项目。

折叠空间应用在未来的科技发展中,人体或者物体的传送技术是出现在大众视野中最为广泛的,也是各类科幻电影必备的元素之一。

而空间折叠是人类一直在追寻的新技术之一,在游戏邻域中该知识点的应用还有待增加,未来市场上VR技术的更新迭代,对于视觉设计的需求也会越来越多,视觉的上的设计技巧会大大影响未来游戏的行业的深度。

折叠空间应用在未来的科技发展中,人体或者物体的传送技术是出现在大众视野中最为广泛的,也是各类科幻电影必备的元素之一。

空间折叠是一种因为强大的引力使空间发生扭曲的现象。

这种现象是真实存在的,因而在理论上只要能达到一定的引力就能使空间发生弯曲,就好比要从一张平整的纸一端到另一端除了走两点间的直线外,还可以直接把纸叠起来,让两点靠近。

在游戏中该知识的变现形式最常见的就是传送门,在正常的空间里,当一个物体或者玩家想从A点移动到B点是,最短的距离是经过A、B两点画一条直线。

而在可折叠的空间里是把A在空间的那端弯向B点所在的空间端,然后再通过一条隧道,可从A点直接到达B点,而忽视他们之间的距离。

在Unity3D开发引擎中,想实现该过程的主要难点是在于摄像机的同步,如何在A点消失是摄像机的朝向,旋转那些给到即将在B点待激活的摄像机。

如果该射击游戏为第一人称,在A点还没进去并且在看向A入口的视觉就应该是看到自身的侧面,但是在现实生活中,如果把眼睛比作主摄像机,人的眼睛是不能直视自己的侧面的,如果在Unity中看,那则会用另外的摄像机从侧面对自己拍摄,再把显示器放在视线范围内,这样就能实时的去观测自己,当然这些只是简单的基本理论。

视觉在游戏设计中是一门很深的学问,在现实中的物理空间,现实世界中存在于理论或者设想中,但无法通过现有的知识来构架出来的产物,通过游戏设计都可以很巧妙的呈现出来,因为在游戏世界里,玩家的感官,是最直观的,而这些东西,在虚拟的三维空间是可以通过遮挡和错位等做法来呈现。

本文将要使用Unity作为开发引擎,使用C#作为开发语言,就传送门作为游戏的主要呈现,最大的解决视觉错位和位置卡顿的一系列问题,实现无卡顿、无特效遮挡的传送门,然后使用传送门搭建出一个有视觉混乱的游戏世界。

1.2传送门技术的国内外研究现状

1.1.1传送门技术的国外研究现状

相对于国内,目前国外在研究Unity3D的起步时间都要长许多,开发的游戏种使用到传送门题材的游戏还有待增加,除了解密类或者恐怖类会用的比较多例如波兰开发商BlooberTeam制作的《层层恐惧》,该作中运用到较多的视觉设计,但是视觉设计风格偏保守,以剧情和解密为主。

而射击传送题材的其他的类型游戏,目前市场上出现的比较少,最为显眼的就属,ValveSoftware2011年发布的FPS游戏《传送门2》,该作品使用V社的引擎Source来搭建,充分使用传送门在各个空间内穿梭,给玩家带来十分震撼视觉冲击,但是该作使用传送门来搭建场景的应用却不是很多,多数以比较直观的传送到一个位置。

还有在一些游戏中存在传送时位置点卡顿或者视觉错位等情况,使用显眼的特效来遮盖,也能欺骗过玩家视觉,呈现出很好的效果。

图1-1ValveSoftware使用传送门设计的《传送门2》

1.1.2传送门技术的国内研究现状

目前国内的传送门游戏作品大多停留在2D的场景,在常规的恐怖解密类使用到的传送门方面的应用也是比较少的。

一是可能国内游戏行业的起部较晚,各种技术的研究深度较国外还有所不及。

二是目前国内的游戏市场并不在单机的恐怖解密类或者相关涉及的其他类别游戏,所以国内游戏开发商暂时不以该技术为研究方向设计游戏。

无论如何,技术是不追随市场的,而该种设计的理念也是值得被重视的。

1.3本文的主要研究内容

根据前文的探讨,本次课题主要是以Unity3D作为游戏开发引擎为研发平台,以c#作为脚本语言,探索研发一款以传送门为技术基础,设计具有视觉错觉的场景环境的第一人称射击类游戏。

其主要研讨内容有如下几个方面:

(1)传送门的技术实现,由于本文的主题是基于传送门来实现的,所以传送门需要处理很多容易让效果穿帮的细节问题。

包括摄像机同步、Shader的编写,传送时出现的位置偏差导致的视觉卡顿等

(2)场景和游戏世界观的搭建。

需要让场景结合传送门的技术,产生一些视觉错乱的效果,而游戏的世界观需要合理化传送门的存在。

(3)敌人的AI编程。

敌人的存在使得游戏玩家具有目标和挑战。

是必不可少的部分,单一的敌人样式也容易产生审美疲惫。

需要简化AI的行为方式,总结所有的行为特点和行为的代码逻辑,生成多种类型的敌人模型

第二章游戏的需求分析及总体方案设计

2.1折叠空间射击类游戏的需求分析

2.1.1玩家需求分析

无论一款电子游戏以任何形式开发出来并且以任意的形式被使用在各种领域的应用之中,它的直接使用者永远都是玩家,而玩家最直观的需求一定是游戏的交互性以及交互的简易性,即玩家的控制操作简单方便,交互反馈突出明显等等[2]。

此外游戏的可玩性也非常重要

2.1.2功能需求分析

本游戏采取的是现少有的多核形式,结合“来回传送”以及“取回疫苗”的操作流程和任务特点,为游戏增添了不少可玩性及特殊性,而完成这些核心的契合,就需要构建游戏世界观来阐述其合理性,并不是一件容易的事。

首先,来回传送这一关键点实现很大程度依赖传送门的完成程度,如果没办法解决传送门的细节问题,也就缺少最主要感官核心体验,也就难以到达期待的设计初衷。

此外,取回疫苗这第二项核心功能也就时玩家游戏中的关键任务,除了要合理化其存在,还要考虑玩家的行为,并在游戏中添加贴图指引,而不是固定的关卡设计路线。

要想在非固定的关卡设计上让玩家最终会会根据设计师的想法走,那需要把指引融入场景的搭建中。

最后,为了让玩家长时间的游玩不会对游戏的元素产生厌恶感,游戏中的敌人应该多样化,给玩家带来不一样的射击体验,玩家的控制器不不能是单调的行走跳跃开枪。

需要更多的交互元素,即使没有真正作用在游戏内容上的交互,新增更多的动画交互,也能给游戏提升不少乐趣。

综合上述内容,将游戏需要完成的游戏功能大致划分如下几个模块

(1)传送门:

传送门效果需要完成摄像机的同步,不能在玩家穿过时有任何穿帮的Bug呈现,因为此项为游戏的核心和游戏深度的依赖。

(2)人机交互:

玩家通过鼠标、键盘等外接输入设备,对游戏内的UI、玩家控制器、场景的其他元素发生交互并给予合适的游戏反馈。

(3)场景搭建:

场景存在也需要游戏世界观的合理化,并且区分基地场景和战斗场景。

基地场景需要更多的视觉交互元素丰富玩家的感官体验,而战斗场景需要更多的是场景的代入感和紧张感。

(4)敌人的多样化:

制作多样化的敌人,一种为单调的攻击特性和巡逻特性。

然后结合几个单调的行为组合成一个具有复杂行为的敌人AI

游戏大体功能划分如下图2-1所示

图2-1游戏大体功能规划图

2.1.3性能需求分析

一款优秀的电子游戏除了需要做到玩法独特优秀、画面精致动人、内容充实饱满之外,更重要的是其是否能够流畅地运行而不会影响到玩家们对其的游戏体验[3]。

游戏中需要使用到多个摄像机的动态渲染,对于GPU的计算无疑是一个很大的负荷。

(1)如果传送门一但多了起来,游戏就很有可能会导致卡顿或者计算机超负荷而死机。

所以需要对传送门画面显示作优化处理从而减少游戏运行时对GPU运算的负担,例如在玩家视觉不在传送门时,显示的不是实时渲染的画面。

(2)导入过多高级精细的模型也会导致游戏性能下降,所以本游戏统一采用低多边形(LowPoly)的3D模型来进行搭建,最大限度调整优化游戏运行时的性能问题。

(3)除以上会影响性能以外,场景的灯,自然光照等也会直接影响游戏的运行流畅,基于是以末日题材,增加场景的代入感和紧张感,取消自然光照的动态渲染,将关卡模式设计为夜间,增加局部点灯光的环境烘托,可以很好的解决这一难题。

至此,本文的功能需求及性能需求都已确认完毕,并且为其所衍生出的问题给予了可行的解决方案

2.2游戏的总体方案设计

2.2.1游戏结构方案设计

因为玩家接触游戏时间跟上手时间都不尽相同,游戏的整体结构不宜太过复杂。

所以该游戏结合大多数游戏类型的结构进行设计。

结构详情如下图2-2所示

图2-2游戏大体结构图

2.2.2总体结构方案设计

结合前文的研究讨论,可以得出本电子游戏总体模块的构架如下图2-3所示。

图2-3游戏总体模块构架图

结合Unity3D游戏开发引擎,研讨各个模块的实现方法,所得具体分析如下。

(1)传送门技术实现模块:

该模块借助Unity的3D场景进行折叠空间的实现设想,需要列出理清2D摄像机同步的实现思路,然后转3D场景制作传送功能。

但是正常的传送必定会有位置的偏差、动画的不衔接、穿过传送门时两个画面不同步的闪屏问题。

需要借助Shader以及脚本的来进行玩家摄像头在进入传送门时的处理。

(2)人机交互模块:

开始界面的模块,利用脚本来实现制作一些简单的按钮交互和点击事件。

可以使用Unity自带的UGUI内置组件,以及内置组件提供的生命周期函数方法。

故事背景分为两模块,一是放置在开始界面UI上的按钮选项,玩家可以通过点击去了解游戏的背景。

二是在进入游戏中,通过添加UI和场景中的公告板向玩家隐晦的讲述故事的背景。

玩家控制器交互模块和场景交互模块可以使用C#脚本编辑模块监听玩家的键盘输入事件,并且对应的动画反馈和场景反馈。

这部分大多使用动画<——>脚本来实现。

(3)场景搭建模块:

场景搭建利用Unity自身的编辑工具,进行缩放旋转,结合游戏故事背景来布置场景。

一些视觉的错乱则需要借助传送门来实现,在一些狭小通道中,玩家穿过传送门而不自知,使玩家不知不觉中处于被传送后的位置。

而对于关照直接设置固定自然光照会使得游戏很生硬,利用脚本调控自然光照,使得从外面看来更像是动态自然光照的变化。

(4)敌人AI模块:

研究丧尸的行为作为敌人的行为,丧尸的行动比较单调,符合典型的状态机行为。

使用Unity的Animator设计丧尸的动画状态机。

然后用C#脚本模拟人物状态机,来实现丧尸的移动攻击行为。

除此之外,敌人还需要更多样化些,基于几个单调的行为状态,衍生一个整合性敌人,该敌人拥有多个行为状态。

敌人的多样性有利于提高玩家的游戏体验。

2.3本章小结

上文从游戏的玩家、功能以及性能三方的需求上进行分析,决定了本游戏的四大功能模块。

从玩家需求的研讨中,得出了人机交互模块的简洁、便利及反馈的重要性,同时也将游戏内容、场景以及玩法方面上的多样性及特殊性给奠定了下来[4];而在功能需求以及性能需求的分析中,主要确定了游戏模型、游戏玩法的主要特点及相应优势。

将其相互结合并且加以总结,得到了本文所研讨电子游戏的总体方案设计。

第三章游戏详细设计及实现

3.1传送门模块

3.1.1传送门的理论设想

传送门,是对门的广义延伸,这个门连接的不在是里外的空间,而是连接整个3维乃至多维空间。

通过传送门,可以将人或物瞬间传送到特定或指定的地点或空间,是一种及其快捷的传输工具。

但由于许多技术问题,传送门还只是个概念,只能在电影、动画及游戏中实现。

根据上文理论得出,项目的实现主要依赖的是传送门的实现。

那么现在就传送门在Unity中的理论设想提出观点:

在正常的空间里,当一个物体或者玩家想从A点移动到B点是,最短的距离是经过A、B两点画一条直线。

而在可折叠的空间里是把A在空间的那端弯向B点所在的空间端,然后再通过一条隧道,可从A点直接到达B点,而忽视他们之间的距离。

在Unity3D开发引擎中,想实现该过程的主要难点是在于摄像机的同步,如何在A点消失是摄像机的朝向,旋转那些给到即将在B点待激活的摄像机。

如果该射击游戏为第一人称,在A点还没进去并且在看向A入口的视觉就应该是看到自身的侧面,但是在现实生活中,如果把眼睛比作主摄像机,人的眼睛是不能直视自己的侧面的。

如果在Unity中看,那则会用另外的摄像机从侧面对自己拍摄,再把显示器放在视线范围内,这样就能实时的去观测自己。

因为要测试两个场景或者一个场景中的两个位置的来回传送,所以需要使用颜色或者布置来区分两个位置的地形。

在一个门看到的实际上是另一个门的内容,在Unity中眼睛是用摄像机模拟的,所以每个门都需要配置一个“眼睛”去观察同步另一扇门的“眼睛”同时把观察到的内容是实时同步到关联的传送门上因此需要解决摄像机同步问题。

有了上述设想接下来开始使用2D思维来更为清晰的展示传送门的摄像机同步问题。

3.1.2传送门摄像机同步的2D概述

根据上述的观点,现在来实现2D的摄像机同步的思路,首先放置一个面朝某个方向的蓝色传送门和朝向另一方向的红色传送门,绿标为玩家所在位置,玩家的视觉为灰色区域,看到蓝色传送门的视觉为蓝色区域,如下3-1图。

 

图3-12D理论图

根据传送门的理论设想知识可以知道,玩家此时所观看的蓝色区域为红的门箭头外显示的内容,所以此时,红色传送门的箭头后面应该也存在一个跟玩家视觉大小一致,观看位置一致的摄像头,正在观察红色传送门箭头方向的情况,然后把摄像机的内容渲染到玩家所看蓝色传送门的方向的屏幕上,理论上这样就可以达到传送门的视觉效果。

但是,这个方案也只在玩家不动时可行,当玩家的视角可以移动时,玩家所看到的蓝色区域也会变化,与此同时,红色门外面的视角也需要同时发生相同的变化才可以保持屏幕显示的视觉是正确的,那么需要怎么保持一致呢?

在Unity中,一个物体可以挂在无数个子物体,而当移动父物体时,子物体也会同时跟着移动,旋转也同理。

根据Unity引擎的这个特性,可以把红色传送门当作父物体,而观看该传送门并且传达视觉内容的摄像机当作门的子物体,这样可以解决当传送门移动,旋转时,摄像机也会同步着传送门的移动和旋转,但是这只是解决了传送门与观看该传送门并且传达视觉内容的摄像机的问题,并没有解决这个传送门的摄像机与另一个传送的摄像机的同步问题,这个问题涉及了晦涩的数学的矩阵问题,所幸的是油管创作者SebastianLague就这问题提供了一个很好解决这一问题的数学公式,如下图3-2所示

图3-2摄像机同步关键代码

该部分可以获取玩家的摄像机相对于蓝色传送门的位置和旋转,然后再相对于红色传送门来观察我么将要穿越到的世界位置,接下来使用这个4x4矩阵所存的相机移动和旋转的数据,直接设置红色摄像机的位置和旋转,这样红色传送门对应的摄像机就会同步玩家摄像机的位置,就可以解决了传送门的同步显示问题,基于传送门的2D理论,开始搭建3D空间的场景。

3.1.33D传送门的实现

(1)传送门画面渲染

由上述的传送门设想和2D的摄像机同步的概述。

我门开始在3D场景上实现传送门的制作,首先在项目中右键创建两个地形的地板Plane,然后在两个Plane中分别添加多个Cube,尽量使得两个场景视觉上不一致,最后需要给两个地形的Plane赋予两个不同的材质。

这样使得传送前和传送后有明显的变化方便调试,如下图3-3。

图3-3测试场景图

界面中有两个传送门(Portal),每个都有一个Screen来展示另一个传送门里的视图,并且接受另一个传送门(Portal)的摄像机传过来的内容,Screen作为传送门的子物体,同时作为子物体的还有传送门(Portal)对应的摄像机。

场景布置完成后,需要使用脚本来实现摄像机同步和渲染画面到相关联的Screen上面。

首先需要一个传送门Portal.CS脚本来管理所有脚本。

脚本中,创建方法CreateViewTexture(),然后让传送门相机渲染它的视图到一张名为viewTexture的贴图上

然后赋予给与此传送门关联的另一扇门的荧幕中使用代码Portal.Screen.material.setTexture(“_MainTex”,viewTexture),最后在创建贴图时需要注意,所创建的贴图必须等于荧幕的宽和高并在渲染方法Render()调用它,在该方法中编写之前的矩阵公式来获得关联相机位置和旋转,并且开启摄像机渲染。

得到效果如下3-4的荧幕反馈:

图3-4传送门演示图1

这个效果明显不是我们需要的效果,现在的效果明显在拿到蓝色传送门的视图后直接把整个画面绘制在荧幕上,是因为普通的着色器(shader)直接使用网格的UV坐标做贴图绘制,所以需要做的时使用荧幕的空间坐标,基于它的游戏荧幕位置坐标X和Y轴被限制在0-1之间绘制到荧幕上,在着色器脚本(shader)修改原先的UV计算方式,让它为我们计算屏幕的坐标位置,调整后得出如下3-5演示图

图3-5传送门演示图2

(2)传送门性能优化方案

由3-5图得出得效果图,图中的效果就是想要呈现的效果,虽然视觉上是达到我们所预想的效果但是在考虑到目前只有两个传送门的视角,如果拥有多个传送门的同时,GPU需要实时计算一对或者多对传送门的渲染,这无疑是给GPU带来严重的负担,所以接下来做一个小优化。

考虑到荧幕上显示的图象实际上是根据玩家视觉来决定的,所得反馈也是之间直接作用在玩家视觉上,那么如果玩家的镜头不在荧幕上时,画面不进行渲染,那么可以极大程度上减低GPU的消耗,那么需要怎么去完成这个功能呢,WIKI作者Michael在文章分享提供的API文档中介绍到该方法IsVisibleFrom的使用详情,那我们依据其提供的解决方案,在Portal.cs脚本新创建一个贴图,作为当玩家不关注荧幕时显示的贴图,因为该贴图是静态的,所以并不消耗过多GPU的性能。

接下来使用GeometryUtility类下的CalculateFrustumPlanes方法来取得摄像机的渲染范围,关键实现如下图3-6

图3-6渲染机渲染范围关键代码

(3)传送门的功能实现

现在传送门的视觉功能基本实现,但是也只是作用于视觉上,作为传送门的主要功能还没有实现,也就是传送物品和主角,为此,我创建了一个名为PortalTraveler的类,任何想要传送的东西都需要先继承它。

然后在传送门脚本Portal.cs中判断,如果一个穿越者靠近则会触发Unity生命周期函数OnTriggerEnter(),则会被添加至trackedTracelers链表中,如果穿越者离开则会触发Unity生命周期函数OnTriggerExit(),并且把它在trackedTracelers链表移除,然后我们在Unity生命周期函数lateUpdata中可以每一帧去遍历这个列表,来判断是否需要传送它们,但在传送前我们还需要判断穿越者从哪一边开始传送的,我们需要判断穿越者在这一帧是否来到传送门的另

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

当前位置:首页 > 人文社科

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

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