基于Unity3D的冒险小游戏设计与实现.docx

上传人:b****3 文档编号:4218003 上传时间:2023-05-06 格式:DOCX 页数:44 大小:3.72MB
下载 相关 举报
基于Unity3D的冒险小游戏设计与实现.docx_第1页
第1页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第2页
第2页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第3页
第3页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第4页
第4页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第5页
第5页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第6页
第6页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第7页
第7页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第8页
第8页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第9页
第9页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第10页
第10页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第11页
第11页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第12页
第12页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第13页
第13页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第14页
第14页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第15页
第15页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第16页
第16页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第17页
第17页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第18页
第18页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第19页
第19页 / 共44页
基于Unity3D的冒险小游戏设计与实现.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于Unity3D的冒险小游戏设计与实现.docx

《基于Unity3D的冒险小游戏设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Unity3D的冒险小游戏设计与实现.docx(44页珍藏版)》请在冰点文库上搜索。

基于Unity3D的冒险小游戏设计与实现.docx

基于Unity3D的冒险小游戏设计与实现

基于Unity3D的冒险小游戏设计与实现

摘要:

Unity3d是近些年来非常热门的游戏开发软件,凭借着跨平台开发能力强的特点,不论是PC端还是移动端又或是游戏主机端,都受到许多开发者的喜爱,就目前来说,Unity3d是许多中小型游戏公司的首选开发工具。

本文主要以Unity3dformac2019版本为开发环境,设计并开发一款单机版的冒险小游戏,按照最初的游戏开发思路,从介绍unity3d以及需要使用的相关软件开始,逐步再由游戏设计,游戏实现到游戏软件测试等一步一步展开,这其中包括游戏素材的引用和制作,游戏后期的设计和代码实现等。

本次主要采用2d平面的设计风格,采用多图层实现2.5d的视觉效果.

关键词:

游戏设计,Unity3d,冒险小游戏

1绪论

1.1引言

电子游戏始于20世纪60年代末,由于当时的技术以及硬件的限制,游戏画面并没有今天那么精致,仅仅只是停留在黑白2d的显示模式。

随着家用游戏主机以及个人电脑硬件配置的加强和软件优化能力的进一步提升,玩家开始对电子游戏的画面以及玩儿法产生了许多苛刻的要求,加上创意不断增加,一般的2d和3d游戏已经不能满足普通玩家,因此,如何将一款游戏做得更加好玩,更有意思,成为了游戏策开发者们共同挑战的问题。

1.2研究背景和意义

1.2.1基于Unity3d的冒险小游戏设计与实现的背景分析

单机游戏发展至今,佳作层出不穷,无论是国内还是国外,优秀的作品比比皆是。

单机游戏不像联网游戏,联网游戏主打快节奏,快速度,而单机游戏往往更能表现出作者的想法,可以通过游戏中的剧情,美术风格来表达。

自二十一世纪以来,随着硬件性能不断的提高,诸多老牌游戏厂家,像日本的任天堂,卡普空,索尼,美国的EA,欧洲的育碧等游戏公司都不断推出自家单机或联机游戏,他们将个人电脑或者家用主机的性能发挥至极致。

从最初的像素帧类游戏,到如今的角色扮演,第一/第三人称射击,即时策略等。

随后在游戏不断发展的情况下,更是在基础类型演变更多的游戏风格,如:

恐怖冒险,电影式互动,解谜冒险,甚至如今比较流行的VR类等等。

由于多媒体技术和个人电脑以及家用主机硬件技术的飞快发展,各种各样的单机游戏不停地冲击着玩家的视觉。

画质的不断提高,也让部分玩家越来越倾向于“画质好”才是好游戏的方向,实际上,画质就算不逼真也可以成为一款好游戏,例如2017年度最佳游戏“塞尔达传说之荒野之息”,它的画质虽不算顶尖,美术风格也不算写实,但它强大的游戏UI,游戏剧情,以及完整的游戏系统,都让该游戏在2017年斩获众多大奖,又比如像素风格的“我的世界”,没有写实的风格,而是采用了创新性的玩法儿,玩家可以自由自在的利于自己的材料来创建属于自己的“世界”,没过多久,“我的世界”就迅速风靡全球。

同样,哪怕是最经典的马里奥,如今2019年依旧采用当年横版风格,将像素风格重制,采用2D,2.5D和3D结合,使用最新的视觉效果,给玩家带来更多欢乐和不一样的体验。

由于本人一直对像素游戏比较喜爱,前期也对Unity3D相关技术进行了了解和学习,因此本次选题将利用Unity3D技术设计并且实现一款像素风格的冒险小游戏,该游戏以熟悉的松田校园作为背景,主角需要躲避怪物或者各种机关来远离危险,探索更多可疑的地方。

1.2.2课题的研究意义

基于Unity3D以及VisualStudio在Mac平台上设计并实现一个像素风格类的冒险游戏,游戏玩家可以通过控制方向键以及空格键实现对人物的控制,还能用特殊方法消灭怪物,收集一定的物品完成逃跑任务。

虽然像素游戏大同小异,但是结合起校园背景且精心设计游戏体验和显示效果,不仅具有很强的可玩性和纪念意义,还可以加深对游戏引擎的了解以及游戏开发的一般制作过程和发布过程。

希望以此游戏,为我的大学生涯画上一个完美的句号。

1.3研究的方法和内容

1.3.1研究方法

(1)文献研究法:

围绕该课题所研究目的和需求,通过查阅相关论文及文献,从全方面的角度和基于客观条件的情况下去了解和透析所需研究的主要问题,与此同时还能寻找解决问题的方法。

(2)实验法:

隔一定时间检查游戏环境,不断运行游戏来测试稳定性,通过修复代码BUG和修改素材以达到如期实现的功能。

1.3.2研究内容

该论文主要分为以下几个部分,具体内容如下:

第一章:

绪论。

主要分析该论文的主要研究背景,分析研究该题目的原因以及阐述该论文的研究意义。

第二章:

开发工具简介。

主要介绍该课题所需要的软件工具,并简单介绍其使用方法和用途。

第三章:

游戏关键组件介绍。

主要展示项目中所用到的重要组件。

第四章:

游戏总体设计,介绍游戏设计思路和规则。

第五章:

游戏内容实现,介绍游戏的内容实现和相关代码

第六章:

游戏系统测试。

第七章:

结束语。

2开发工具简介

2.1Aseprite绘画软件

Aseprite是一款能创建2D像素静态图画或者动态图画的创意开发工具,也是游戏业内许多制作像素风格素材的绘画软件之一。

它不仅体积小巧,上手难度较低,还拥有不俗的动画功能。

Aseprite初始界面拥有Newfile(创建新文件),openfile(打开文件),recoverfile(恢复文件)三种基本功能。

如图2-1.

图2-1创建界面

创建新画板时可以调整以下选项。

图2-2所示

图2-2设置画板图2-3绘画工具

Size(尺寸):

可以调整width(宽度)和height(高度)(宽度和高度影响画板大小以及图片分辨率)。

ColorMode(色彩模式):

1.RGBA:

三原色搭配色彩,每个像素为32位,由红绿蓝以及透明度组成。

2.Grayscale:

灰度,每个像素为16位,由灰度值以及透明度组成。

3.Indexed:

索引,每个像素为8位,可以修改图片中某个像素点的颜色,相应原来的颜色也会跟着修改。

Background(背景样式):

1.Transparent:

透明背景板,适用于制作实体素材,例如,人物,花草树木等。

2.White:

白色背景板,适用于制作环境背景图,例如,雪山,白天等。

3.Black:

黑色背景板,适用于制作黑暗系背景图,例如,宇宙,黑夜等。

AdvancedOptions(高级选项)如果勾选☑️则会出现PixelAspectRatio(宽高比例)

1.SquarePixels(1:

1)宽与高1:

1

2.Double-WidePixels(2:

1)宽与高2:

1

3.Double-HighPixels(1:

2)宽与高1:

2

Aseprite绘画工具可分为三大类,分别为功能选择类,着色构图类和细节修改类。

功能选择类包括选择框,放大镜工具,移动工具。

着色构图类包括画笔(铅笔,喷雾),填充工具(油桶填充,渐变填充,多边形填充),取色器,线条图形工具。

细节修改类包括橡皮擦,虚化,粒子化修改。

如图2-3.

2.2Unity3dformac

Unity3d是由UnityTechnologies公司所研发的可以使玩家或者开发者能轻松创建例如二维&三维视频交互游戏,三维动画作品等可互动类型的多平台综合性游戏开发软件,同时也是一款功能十分全面的专业游戏引擎。

Hierarchy视图:

该视图包含了当前游戏场景的所有游戏对象(GameObject),其中一些对象可以是资源文件的实例,也可以是自己制作的素材,比如预制对象(Prefab)或是已经建好的3d模型。

当场景中出现增加或者删除游戏对象时,Hierarchy视图对应的对象也会随之改变。

除此之外,Hierarchy视图还可以通过对对象建立父子级关系的方式对数量较大的对象进行移动和编辑,从而使开发者进行更加精确和简单的操作。

图2-4开发界面布局

Scene视图:

可以直接编辑游戏场景中不同对象的实时位置(Transform),可以在Hierarchy视图中添加游戏对象(GameObject)进行编辑,也可以在项目文件夹(Project)中拖拽你所需要的游戏对象到Scene视图中。

图2-5Scene视图

Game视图:

用于显示最终完成的游戏运行画面,游戏开发者可以通过game视图来测试游戏性能稳定。

点击播放按钮进行游戏预览,可以随时中断或者停止测试,以进行细节修改。

Game视图还能切换不同屏幕显示,调节自己合适的分辨率以及显示大小,如图2-6所示。

图2-6Game视图

Animation视图&Animator视图:

使用该视图进行对GameObject的帧动画编辑与预览,通过调节具体参数从而达到所希望的动画效果。

Animation视图提供了暂停,快进,后退,播放等基础功能,为GameOject动画添加不同的控制函数,调整动画播放效果。

图2-7Animation视图

与Animation相似,Animator用来编辑不同动画之间的切换效果,调整动画切换的流畅性。

不仅可以设置各个动画的触发条件,也可以在动画与动画之间修改视觉参数。

图2-8Animator视图

Inspector视图:

用于显示所选定游戏对象的所有组件以及其他相关属性的详细信息。

组件可以包括Transform(位置,角度,缩放),Mesh(网格),Collider(碰撞体),Camera(摄像机),Joint(连接体),Audio(声效),Animation(动画),Light(光阴特效),Particle(粒子特效)和Script(脚本代码)等。

图2-9Insperctor视图

Project视图:

Preject用于管理游戏目录下所有可使用的资源文件,包括场景资源,脚本资源,模型资源,音频文件和预制组件等。

可以直接拖拽文件夹里的资源

图2-10Project视图

到Scene视图中,也可以添加不同素材到Inspector的个别Component里,比如天空背景,材质球,又或者是制作tilemap时所使用的素材。

2.3编程语言

文章中所使用到的开发语言为C#,C#语言是由美国微软公司开发的一种最新且面向对象的编程语言。

它可以让开发程序员快速地编写基于Microsoft.NET平台上的各种应用程序。

C#的特点是简单高效而且与C++有很高的相似度,对于有C语言以及C++语言开发基础的工程师来说,可以很快的熟悉C#语言的使用。

在使用脚本之前,需要将Unity3d中的脚本编辑默认设置为VisualStudio,VisualStudio为本次项目编辑C#文件的主要平台。

图2-11VisualStudio

3游戏关键组件简介

3.1Transform

Scene中所有游戏对象(GameObject)都默认存在组件Transform。

它是控制该游戏对象位置,角度以及尺寸大小的重要组件。

图3-1Transform组件

Position:

控制该游戏对象的位置,X,Y,Z分别代表横,竖,纵轴,可以通过在Transform里调整参数修改位置,也可通过键盘“W”键在Scene视图直接拖动游戏对象改变位置。

Rotation:

调整游戏对象的角度。

Scale;可以延伸游戏对象的X,Y,Z轴方向的大小,如果为负数,则会在该轴上调换方向,比如:

X轴为1,则方向为右边,X为-1,方向为左边,Y,Z轴则是上下对换,在2D里,Z轴没变化。

3.2Rigidbody2D

Rigidbody2D也可以称为2D刚体组件,是Unity在游戏画面中能呈现模拟物理效果的重要组件之一。

图3-2Rigidbody2D

BodyType可以选择游戏对象(GameObject)在开始游戏时所处的状态,Dynamic为活动状态或者称之为默认状态,即GameObject在开始游戏时处于正常的物理状态,拥有自身质量,地心引力,线性阻力等,模拟所有物理条件。

Kinematic则是自身移动却不受力的作用。

而Static为静态,当游戏开始时,所标为静态的GameObject静止。

在Rigidbody2D中,为了能更好模拟出真实的物理效果,可以调整GameObject的质量,线性阻力,角速率,地心引力大小,睡眠模式等等。

其中睡眠模式可以调节为永不睡眠:

游戏开始后,不论收到什么外界的物理碰撞,该对象的物理参数都不变,开始时唤醒:

收到物理碰撞后才会表现出特点的物理现象,永久睡眠:

任何时候都不具备刚体特性,和去除勾选组件是同一种用法。

如果控制2D人物移动时不希望受到碰撞时而产生旋转,你需要在Constraints里把FreezeRoataionZ轴勾选。

3.3Collider2D

3.3.1BoxCollider2D

BoxCollider2D可称之为矩形碰撞器,当在GameObject中添加该组件时,游戏对象会有碰撞体的属性。

图3-3BoxCollider2D

可以通过EditCollider来调整GameObject中的碰撞器区域大小,必要时,如果希望该游戏对象是属于触发器类型,可以在isTrigger选项中勾选True,这样该游戏对象可以用来制作地图机关,或者触发某种剧情等等的作用。

3.3.2CircleCollider2D

CircleCollider2D与BoxCollider2D相似,检测面积形状为圆形,图3-4为CircleCollider2D。

图3-4CircleCollider2D

3.3.3PolygonCollider2D

PolygonCollider2D为多边形碰撞器,多数用来模拟各种各样的地形变化,让角色在特定地面行走流畅。

图3-5为PolygonCollider2D。

图3-5PolygonCollider2D

3.3.4TilemapCollider2D

TilemapCollider2D是制作地图场景中十分重要的组件,在使用Tilemap的过程中,开发者需要给Tilemap对象添加该碰撞器角色才能在地面上正常行走。

图3-6TilemapCollider2D

3.4Camera&Audio

Camera和Audio是项目中控制游戏视野和声音的重要组件。

Camera是控制游戏视角和决定游戏视野的关键组件之一。

关于Camera的组件有Camera,CinemachineBrain,CinemachineVirtualCamera以及CinemachineConfiner。

当使用多个摄像机时,你可以通过ClearFlags来决定屏幕内哪些镜头需要被清除。

在镜头中的地图元素制作完成且没有背景时,background可以将剩余屏幕的内容填充颜色。

Camera组件还可以调整摄像机的视口大小和视野范围,不仅如此,为了能体现专业镜头的感觉,Unity还提供了调节相机深度以及渲染路径的功能。

图3-7为Camera组件。

图3-7Camera组件

Audio组件用到有AudioListener和AudioSource,AudioListener是一个接收器,如果组件中没有AudioListener,那么声源就无法被听到,只有AudioListener处于工作中,相关的声源文件就会被听到,那么AudioListener就会播放所接收到的声音。

AudioSource顾名思义就是声源的意思。

开发者使用该组件设置声音,可以设置背景音乐,动作声效,特殊声效等,只需要将声源文件添加在AudioClip中即可,同时还能在3DsoundSettings中调节各项声音参数来达到你想要的效果。

图3-8为AudioSource。

图3-8AudioSource

3.5Script

Unity3D所使用的代码脚本语言为C#,Script则是创建代码脚本以及修改各参数的重要组件。

如图3-9为Script组件。

图3-9Script组件

创建好Script后,双击点击Script可进入代码编辑界面,在代码中,所有进行public类的参数都会在Script组件中显示出来,就如3-9图一样,这些公共类参数可以是一些基础参数,比如移动速度,跳跃力,攀爬速度或者是生命值等,还可以是获取GameObject(游戏对象)的刚体组件,碰撞体组件,获取这些组件有利于在代码中实现游戏中的各种碰撞效果。

4游戏总体设计

4.1游戏总体设计思路

游戏类型属于平台跳跃冒险类游戏,拥有主要角色,敌人,陷阱,道具等元素。

游戏由两大主体组成,分别是场景元素以及菜单功能。

游戏主体思路如图4.1

图4-1游戏主体思路

游戏实现效果:

玩家从主菜单进入游戏即可操控角色探险,可以实现躲避怪物,陷阱或是击杀怪物,利用陷阱,遇到难以通过的地方可以借助游戏道具或者其他物品帮助玩家解决难题,如果受到伤害则血量槽会得到反馈,如果血槽为0则游戏失败,弹出死亡菜单选择是否继续进行游戏或退出游戏。

4.2游戏规则设计

胜利条件;玩家操控主角在环境中自由探险,使用各种办法接触危机并且最终抵达目标地点。

死亡条件;角色左上角血量槽消耗殆尽,或触碰秒杀机关;

击杀敌人:

使用特殊地形击杀,或者操控角色通过跳跃踩踏以击杀敌人;

难易度:

游戏从开始至后面难度逐渐上升,有相关告示牌给予一定提示;

道具,陷阱:

获得解决谜题的道具,补充血量的物品;

位置重置:

如果因为操作失误或者不慎掉出地图外,一定时间后会重新回到地面。

4.3设计步骤

1.编辑地图地形,搭建地图场景

2.创建人物角色,为角色添加动画以及基础移动脚本

3.创建敌人,添加动画以及自动寻路脚本

4.为人物角色添加镜头,为游戏内一些元素添加声效

5.设置场景互动,增添可玩性

6.编辑UI界面

7.游戏系统测试

5游戏内容实现

5.1地图场景设计

5.1.1背景设计

首先需要在Hierarchy视图中创建新的游戏对象,我把它命名为Background,随后在素材文件夹中把背景图文件拉到Hierarchy中,并将背景图放入Background中,这样所有的背景图都属于Background的子对象,如果想要进行背景修改,可以直接从父对象Background进行操作。

图5-1背景。

Background为父对象,其下的back为子对象。

图5-1游戏背景

第二步,为了让背景图更具有立体效果,可以尝试让背景图跟着的角色移动而一起移动,这样可以考虑给Background对象添加一个代码脚本。

在Background的Inspector上添加Scripts组件,或者在文件加点击右键,创建新的Script文件,我将这个文件命名为Parallax,意思是视觉差,创建成功后拖拽到Background对象的组件中。

图5-2Parallax.cs文件

图5-2Parallax.cs文件

打开已经创建好的Parallax文件,初始化需要用到的参数。

这里我需要用到的参数有,背景移动的速度,当前x和y的坐标值,以及跟随的镜头。

我选择创建将摄像机和移动速度设置为公共类,这样可以方便我们在组件中直接调整数据而不需要进入脚本代码调整。

参数初始化如下,

publicTransformCam;

publicfloatmoveRate;

privatefloatstartPointX,startPointY;

publicboollockY;//false是否锁定y轴

这里需要初始化一个Transform类的参数Cam,用来选择所需要跟随的镜头,一个float类的moveRate用来调整背景移动速度以及两个float类获取当前x,y点坐标的参数,最后补上Y轴上是否滚动的判断参数,为bool类型。

由于x,y点坐标是随机变化的,所以需要在游戏一开始的时候就自动获取当前坐标,获取当前x,y坐标。

获取完当前坐标后,考虑游戏坐标会随着主角移动而跟着改变,因此需要每一帧都需要更新,这里需要用到new一个Vector2来更新坐标。

voidUpdate()

{

if(lockY)

{

transform.position=newVector2(startPointX+Cam.position.x*moveRate,transform.position.y);

}

else

{

transform.position=newVector2(startPointX+Cam.position.x*moveRate,startPointY+Cam.position.y*moveRate);

}

}

因为坐标是动态改变的,所以需要将执行代码写在update里。

transform.positon意思是该游戏对象的坐标,newVector2是重新定义二维坐标的意思,这里写了if语句,判断是否锁定Y轴,如果锁定了Y轴,则改变x轴的坐标而锁定y轴,若Y轴没锁定,则y轴可以改变。

图5-3Parallax(Script)

图5-3为Inspectir中所显示的脚本组件,此时拖拽所需要的摄像机MainCamera到Cam上,移动速率调整为0.5,锁定Y轴,因为游戏属于横版动作类,Y轴的滚动没有太多的要求。

5.1.2地形设计

在Unity中,制作2D地图场景常用的功能是Tilemap。

Tilemap也可以称之为瓦片地图,将制作好的地图素材放入Tilemap中,然后通过其自带的画板功能,把自己想做的地图场景绘制出来。

制作地图之前,我需要在Hierarchy上创建关于地图的游戏对象,点击右键创建2DObject,然后选择Tilemap,这样Hierarchy就会出现名字为Grid的游戏对象,里面有个子对象Tilemap,之后,在TilePalette视图中点击CreateNewPalette,然后选择已经制作好的地图素材,需要注意的是,为了让地图和背景更加匹配,添加素材前需要把素材的PixelsPerUnit(每单元的像素)调成合适的大小,这里我调整为16。

图5-4PixelsPerUnit图5-5TilePalette

添加完后的TilePalette如图5-5,红色框标记的地方为Tilemap绘制工具,正常情况下可以自由移动和放大缩小,如果点击Tilemap后,它会自动跳到画笔功能,比如,我在TilePalette中选择map2,点击若干个像素格的内容,并在Scene视图中进行绘画,作出比较满意的地图效果。

图5-6为全地图一部分。

图5-6地形场景

制作好Tilemap后,可以给地形以外的地方添加各种装饰背景,使地图更加丰富,看起来更加立体。

图5-7为添加好装饰素材后的效果。

图5-7添加好素材的地图场景

5.1.3地形碰撞体

当制作好Tilemap后,此时的地图只是一些图片,当人物进入游戏中,人物是不会站在地图上的,所以需要给Tilemap添加碰撞器,上文提到有个叫TilemapCollider2D就是为了给地图添加碰撞器,使地图更具物理效果。

图5-8为添加TilemapCollider2D组件,制作时必须勾选且IsTrigger填false。

图5-8TilemapCollider2D

之后回到Scene视图就能看到哪些区域是可以碰撞,如果需要非碰撞区域,你可以添加新的Tilemap,创建Collider的时候,把Collider勾选去掉,这样就能实现把地图绘制出来,但是部分地区看穿透,不阻碍空间。

图5-9为可碰撞区域。

图5-9可碰撞区域

5.2人物角色与敌人

5.2.1人物创建与基础移动

首先创建人

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2