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

博主主页:电子科技大神
博主简介:专注电子技术领域和Unity3D毕业设计项目实战,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:毕业设计(单片机项目,plc,仿真,Unity3D等)、简历模板、学习资料、技术咨询。



一、摘要

  摘要:Unity3d是近些年来非常热门的游戏开发软件,凭借着跨平台开发能力强的特点,不论是PC端还是移动端又或是游戏主机端,都受到许多开发者的喜爱,就目前来说,Unity3d是许多中小型游戏公司的首选开发工具。
本文主要以Unity3d for mac 2019版本为开发环境,设计并开发一款单机版的冒险小游戏,按照最初的游戏开发思路,从介绍unity3d以及需要使用的相关软件开始,逐步再由游戏设计,游戏实现到游戏软件测试等一步一步展开,这其中包括游戏素材的引用和制作,游戏后期的设计和代码实现等。本次主要采用2d平面的设计风格,采用多图层实现2.5d的视觉效果.
关键词:游戏设计,Unity3d ,冒险小游戏

二、绪论

  基于Unity3D以及Visual Studio在Mac平台上设计并实现一个像素风格类的冒险游戏,游戏玩家可以通过控制方向键以及空格键实现对人物的控制,还能用特殊方法消灭怪物,收集一定的物品完成逃跑任务。虽然像素游戏大同小异,但是结合起校园背景且精心设计游戏体验和显示效果,不仅具有很强的可玩性和纪念意义,还可以加深对游戏引擎的了解以及游戏开发的一般制作过程和发布过程。希望以此游戏,为我的大学生涯画上一个完美的句号。

二、系统分析

4.1 游戏总体设计思路

  游戏类型属于平台跳跃冒险类游戏,拥有主要角色,敌人,陷阱,道具等元素。游戏由两大主体组成,分别是场景元素以及菜单功能。游戏主体思路如图4.1
在这里插入图片描述

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

4.2 游戏规则设计

胜利条件;玩家操控主角在环境中自由探险,使用各种办法接触危机并且最终抵达目标地点。
死亡条件;角色左上角血量槽消耗殆尽,或触碰秒杀机关;
击杀敌人:使用特殊地形击杀,或者操控角色通过跳跃踩踏以击杀敌人;
难易度:游戏从开始至后面难度逐渐上升,有相关告示牌给予一定提示;
道具,陷阱:获得解决谜题的道具,补充血量的物品;
位置重置:如果因为操作失误或者不慎掉出地图外,一定时间后会重新回到地面。

4.3 设计步骤

1.编辑地图地形,搭建地图场景
2.创建人物角色,为角色添加动画以及基础移动脚本
3.创建敌人,添加动画以及自动寻路脚本
4.为人物角色添加镜头,为游戏内一些元素添加声效
5.设置场景互动,增添可玩性
6.编辑UI界面
7.游戏系统测试

三、效果图

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-2 Parallax.cs文件
在这里插入图片描述

图 5-2 Parallax.cs 文件
打开已经创建好的Parallax文件,初始化需要用到的参数。这里我需要用到的参数有,背景移动的速度,当前x和y的坐标值,以及跟随的镜头。我选择创建将摄像机和移动速度设置为公共类,这样可以方便我们在组件中直接调整数据而不需要进入脚本代码调整。参数初始化如下,
public Transform Cam;
public float moveRate;
private float startPointX,startPointY;
public bool lockY; //false 是否锁定y轴
这里需要初始化一个Transform类的参数Cam,用来选择所需要跟随的镜头,一个float类的moveRate用来调整背景移动速度以及两个float类获取当前x,y点坐标的参数,最后补上Y轴上是否滚动的判断参数,为bool类型。
由于x,y点坐标是随机变化的,所以需要在游戏一开始的时候就自动获取当前坐标,获取当前x,y坐标。
在这里插入图片描述

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

  void Update()
    {
        if (lockY)
        {
            transform.position = new Vector2(startPointX + Cam.position.x * moveRate, transform.position.y);
        }
        else
        {
            transform.position = new Vector2(startPointX + Cam.position.x * moveRate, startPointY + Cam.position.y * moveRate);
        }
    }

因为坐标是动态改变的,所以需要将执行代码写在update里。transform.positon意思是该游戏对象的坐标,new Vector2是重新定义二维坐标的意思,这里写了if语句,判断是否锁定Y轴,如果锁定了Y轴,则改变x轴的坐标而锁定y轴,若Y轴没锁定,则y轴可以改变。
在这里插入图片描述

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

5.1.2 地形设计

在Unity中,制作2D地图场景常用的功能是Tilemap。Tilemap也可以称之为瓦片地图,将制作好的地图素材放入Tilemap中,然后通过其自带的画板功能,把自己想做的地图场景绘制出来。
制作地图之前,我需要在Hierarchy上创建关于地图的游戏对象,点击右键创建2D Object,然后选择Tilemap,这样Hierarchy就会出现名字为Grid的游戏对象,里面有个子对象Tilemap,之后,在Tile Palette视图中点击Create New Palette,然后选择已经制作好的地图素材,需要注意的是,为了让地图和背景更加匹配,添加素材前需要把素材的Pixels Per Unit(每单元的像素)调成合适的大小,这里我调整为16。

在这里插入图片描述

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

图5-6 地形场景
制作好Tilemap后,可以给地形以外的地方添加各种装饰背景,使地图更加丰富,看起来更加立体。图5-7为添加好装饰素材后的效果。
在这里插入图片描述

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

总结

   本次Unity游戏的开发虽然属于轻量级的项目,但是项目中包含了许多组件和脚本代码的使用,这其中包括了各种模拟物理实现的组件,摄影机的镜头设置,UI界面布局,帧动画设定及各场景布置。通过这次项目让我学习到了很多在学校没接触过的知识,因为游戏软件涉及许多知识层面,包括美术,策划,脚本设定等等。从最基础的背景图片放置到各脚本控制游戏对象再到UI界面,什么地方需要使用关键组件,什么地方需要使用特殊代码,哪些地方需要逻辑上的正确,我都在unity中从零开始,也在项目制作的过程中,慢慢看到自己制作的游戏软件从无到有,感受到满满的成就感。

目 录

目 录

1 绪 论 1
1.1 引言 1
1.2 研究背景和意义 1
1.2.1 基于Unity3d的冒险小游戏设计与实现的背景分析 1
1.2.2 课题的研究意义 2
1.3 研究的方法和内容 2
1.3.1 研究方法 2
1.3.2 研究内容 3
2 开发工具简介 4
2.1 Aseprite绘画软件 4
2.2 Unity3d for mac 5
2.3编程语言 9
3 游戏关键组件简介 10
3.1 Transform 10
3.2 Rigidbody 2D 10
3.3 Collider 2D 11
3.3.1 Box Collider 2D 11
3.3.2 Circle Collider 2D 12
3.3.3 Polygon Collider 2D 12
3.3.4 Tilemap Collider 2D 13
3.4 Camera & Audio 13
3.5 Script 15
4 游戏总体设计 17
4.1 游戏总体设计思路 17
4.2 游戏规则设计 17
4.3 设计步骤 18
5 游戏内容实现 19
5.1 地图场景设计 19
5.1.1 背景设计 19
5.1.2 地形设计 21
5.1.3 地形碰撞体 23
5.2 人物角色与敌人 24
5.2.1 人物创建与基础移动 24
5.2.2 跳跃和下蹲 25
5.2.3 敌人AI 27
5.2.4 动画效果的添加 28
5.3 摄影机&声效添加 30
5.3.1 摄影机 30
5.3.2 声效 32
5.4 场景互动 32
5.5 UI界面 33
5.5.1提示牌 33
5.5.2血条 34
5.5.3菜单 35
6 游戏系统测试 37
6.1 测试环境 37
6.2 游戏运行测试 37
7 结束语 43
参考文献: 44
致谢 45

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在五花八门的游戏分类中,益智游戏是不可或缺的一大板块;而在益智游戏这个分类中,消除合成类游戏又是当之无愧的No.1。从考古级别的《俄罗斯方块》到现在风靡全国的《开心消消乐》,消除合成类游戏经久不衰,并且不断地涌现出新的经典作品,带给我们新的启发和乐趣。作为Unity3D的初级开发者,从头到尾独立完成一款简单的2D棋盘消除合成小游戏是你初级实战的最好选择。既能全面而详细的检验你的基础框架能力、C#编程能力、UGUI适配技巧,又可以在此基础上,较为深入的学习协程方法、DoTween插件和消除合成类的核心算法,一举数得。一言以蔽之,消除合成类游戏不难,但要写好却并不容易。它琐碎的功能逻辑、层出不穷的延时操作以及复杂的状态控制很容易让人顾此失彼,手忙脚乱,最后的结果往往是,费劲九牛二虎之力把功能实现好了,但代码已经乱成一团糟,定位Bug难、扩展新功能难,甚至自己读起来也难。本课程的最大目的,就是帮初级开发者梳理逻辑,写出规范而有条理的代码,避免陷入以上尴尬境地。条理捋清楚了,你就会觉得一切似乎变得简单了,很多地方都会顺理成章。本课程没有什么高深的编程技巧,更没有炫酷的视觉效果,只是一步一步教你如何踏踏实实、稳稳当当的完成一款《简单消消乐》。因此,资深大牛你就别进了,想学高深知识的你就别点了,自认为消除小case、分分钟搞定的高手你也趁早走人。在这门课程里,你能够学到的,只有以下几点:1、如何使用UGUI搭建棋盘游戏的基础阵列;2、如何快速的实现通用的三消逻辑;3、如何使用Dotween插件实现物体的位移、缩放、旋转动画;4、如何熟练的使用协程方法完成延时操作逻辑;5、数组、集合、引用类型、Prefab等基础知识的巩固;6、如何写出规范而有条理的代码;7、益智小游戏的通用模板。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值