版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于Unity3D的生存解谜游戏的设计与实现Design and Implementation of Survival Puzzle Game base on Unity3D 内容摘要 自我国进入二十世纪八十代以来,国民经济如日方升,人民的生活方式也焕然一新,渐渐地人们对娱乐的需求越来越大,娱乐的方式也变得越来越多样化。然而电子游戏作为年轻一代的主要娱乐方式,其地位在年轻一代的心中也愈发重要。很多人都会通过游戏的简单操作完成有趣的任务,获得放松与快乐;通过角色扮演,在虚拟世界中寻找游戏的快感。2020年各行各业都受到了一定程度的冲击,游戏行业的发展也将充满了新的机遇和挑战。本文主要阐述的是T
2、he twelfth door的详细开发过程,包括我的研究思路、该游戏的开发环境以和开发工具、游戏的需求分析、游戏素材的收集以及游戏功能的实现。The twelfth door是一款基于Unity3D游戏引擎的生存冒险解谜类游戏,玩家需要通过扮演冒险者的角色,通过信息和物品的收集,解决每一个房间里面的谜题,才能对应打开每一个房间的门,通过十二扇门即可获得胜利。该游戏主要考验了玩家的观察能力、解决谜题的能力、手动收集信息和物品的能力,更多地需要玩家自己去探索和研究。本项目主要涉及到了Unity中场景的搭建、UI界面的设计、动画的创建、player玩家的移动与摄像机的跟随、背包系统的设计与实现和E
3、vent System响应事件。利用Autodesk 3ds Max 2014和Maya 2014进行建模,Unity3D引擎进行游戏设计,C#脚本语言编写游戏代码。关键词: 电子游戏 角色扮演 Unity3D 解谜 Abstract Since our country entered the 1980s, the national economy has been rising rapidly, and the way people live has also been changed. peoples demand for entertainment is increasing, and
4、the ways of entertainment are becoming increasingly pluralism.However, as the main entertainment method of the younger generation, the status of electronic games are becoming more and more important in the younger generations mind.Many people will complete the interesting tasks through the simple op
5、eration of the game to get relaxation and happiness; through role playing, look for the thrill of the game in the virtual world.In 2020, all trades and professions have been impacted to a certain degree, and the evolvement of the game industry will also full of new opportunities and challenges.This
6、article mainly describes the detailed development process of The twelfth door, including my research ideas, the development environment and development tools of the game, the demand analysis of the game, the collection of the game materials and the implementation process of the game functions.The tw
7、elfth door is a survival and adventure puzzle game based on the Unity3D game engine. Players need to solve the puzzles in each room by playing the role of an adventurer and collecting information and items in order to open each room.Open all the doors and you can win this game.The game mainly tests
8、the players ability to observe, solve puzzles, and collect information and items manually. It requires more exploration and research by the player.This project mainly involves the construction of scenes in Unity, the design of UI interfaces, the creation of animations, the movement of player players
9、 and the follow-up of cameras, the design and implementation of backpack systems, and the Event System response events. Use Autodesk 3ds Max 2014 and Maya 2014 for modeling, Unity3D engine for game design, C # scripting language to write game code.Key words:Electronic Game Role-Playing Unity3d Puzzl
10、e solving目 录第一章 绪论11.1 课题研究的背景与意义11.2 国内外相关研究情况2第二章 相关技术介绍52.1 开发工具52.1.1 Unity3D游戏引擎简介52.1.2 3d Max简介52.2 开发语言62.2.1 C#语言简介62.3 游戏开发环境6第三章 游戏的需求分析73.1用户需求分析73.2功能需求分析73.3数据存储需求分析8第四章 游戏的整体设计94.1 游戏的主要架构设计94.2 游戏的剧情设计94.3 游戏关卡设计10第五章 游戏的详细设计与实现115.1游戏的场景搭建115.1.1开始场景UI设计115.1.2游戏场景搭建115.2物品道具的设计125.
11、2.1物品道具动画设置125.2.2物品道具的生成145.3 角色的移动155.4摄像机跟随155.5背包系统的实现165.5.1 搭建背包的UI165.5.2 背包数据存储175.5.3 展示物品信息195.5.4 实现鼠标拖拽物品225.6线索提示235.6.1 直接线索235.6.2 游戏线索245.7响应事件255.8 数字密码锁的设置26第六章 游戏测试286.1游戏功能测试28第七章 总结与展望297.1总结297.2展望29致谢31参考文献326第一章 绪论1.1 课题研究的背景与意义当今社会,电子产品越来越得到普及,我们的网络环境也越来越得到普及和完善。自我国进入二十世纪八十年
12、代以来,国家经济如日方升,国民除了满足自身的基本生活需求以外,也渐渐关注到精神层面上的需求。因此人们对于娱乐的需求也越来越大,娱乐的方式也变得越来越多样化。近年来,游戏产业的发展欣欣向荣和网络技术的日益进步,就是像是电子游戏的催化剂,极大地推动了电子游戏的发展。与此同时,由电子产品衍生而来的电子游戏迅速收到广大玩家的青睐,各种电子游戏如雨后春笋般涌现,电子游戏越来越成为人们日常生活中不可或缺的一部分。电子游戏其实是数字媒介的一种,同时也是现代普罗大众自我娱乐的一种方式。游戏里面的角色丰富多样,人物个性鲜明、富有情绪、血肉饱满,再配合上特定的故事或者历史背景,加上适当的背景音乐,让人仿佛置身其中
13、。电子游戏改变了我们的生活方式、娱乐方式和交友方式。RPG游戏,也就是我们经常所说的角色扮演类游戏,需要玩家扮演游戏世界当中的主人公,通过角色扮演完成相关游戏情节,在游戏世界中获得快感。角色扮演类游戏不仅仅对玩家起到一定的减压效用,还可以训练玩家的抗压能力、生存能力、社交能力和信息搜索的能力。有的人认为游戏是另外一种人生,在开发者所构建的虚拟世界里,你可以透过角色扮演体验到在现实生活中体验不到的世界,做任何你想做的事情,从而得到满足。在适当的时候去玩上一把游戏,除了可以帮我们褪去工作的负担,还可以带给我们即时满足的快感。有的时候玩游戏不仅仅是在玩游戏,虚拟的游戏世界就像是一个巨大的社交平台。通
14、过游戏,你可以获得较为真实的社交体验,可以认识到志同道合的游戏好友,收获满满的友谊。当然,因游戏之缘,收获爱情的人也比比皆是。电子游戏的受众相当广泛,它不仅面向年轻一代的玩家,就算是小孩或者老人也同样适用。游戏的意义在于娱乐,但并不局限于此。目前很多的游戏都被赋予了宣传和教育的重大意义,把游戏和教育知识有机地结合起来,那么我们就可以在游戏的同时学习到各个领域的其他知识。在娱乐中学习、在学习中娱乐也未尝不是一件好的事情。因此能够做到寓教于乐,也是游戏的一大意义。随着我国游戏产业的飞速发展以及游戏用户规模日益扩大,游戏产业及其衍生的相关行业都创造了巨大的商业价值,对我国的经济的发展起到了非常重要的
15、推动作用。电子游戏在经济发展中创造巨大价值的同时,也作为社会文化的重要成分影响着人们价值观念的构建1。电子游戏越来越成为当代人的主要娱乐方式,在塑造社会文化方面也发挥着极其重要的作用。事实上,大众对待电子游戏的态度也是千人千面。无论如何,游戏产业也已经迅速地成长起来了,游戏也成为了当代中国人们生活当中不可或缺的一部分。曾经有国外研究者指出,游戏的最终目的是实现与现实世界的互动,也就是说一款游戏的设计应该基于现实的社会生活。未来,我们需要对游戏玩家的心理、游戏与教育知识的有机结合、游戏与现实生活的互动、游戏与社会文化的有机结合等等进行更加深入的研究,相信我国的游戏市场也会越来越好。本课题主要结合
16、了RPG游戏和解谜类游戏的两大特点,让玩家既能体验到角色扮演的快感,也可以享受到解谜和探索的乐趣。1.2 国内外相关研究情况二十世纪四十年代,历史上出现了第一台电子计算机,为互联网时代的到来奠定了坚实的基础。1985年,诞生了世界上的第一款电子互动游戏,电子游戏也开始进入萌芽初期。二十世纪六十年代,计算机编程语言出现并开始逐步发展。科技发展日新月异,各个领域对计算机技术的需求也不断加大,计算机编程语言开始变得复杂化和多样化,大大推动了计算机编程语言的发展。编程语言的出现,大大减少了计算机编程的人力和物力,同时也促进了电子游戏的进一步发展。二十世纪七十年代初,游戏公司开始出现在大众的视线中,一马
17、当先的就应当是Atari(雅达利)公司了。随后雅达利公司开发出一款可以通过游戏主机接入电视使用的游戏,使得游戏画面第一次在电视上面播放。玩家可以借助其他的辅助设备,可以控制人物在电视屏幕上的移动轨迹和操作,使得游戏的可玩性大大提高。不仅如此,Atari(雅达利)公司的业务范围开始涉及到游戏机的制造,并且取得了十分不错的成绩,促进了家用游戏机的发展。随后街机游戏开始兴起,Atari(雅达利)公司所生产的家用游戏机销量急剧上升,玩家可以足不出户就能玩到街机游戏,玩家人数也开始增多,电子游戏也越来越被大众所接受。九十年代初期,各种电子游戏如同雨后春笋般涌现,电子游戏行业发展得如火如荼,慢慢地电子游戏
18、行业所带来的巨大商业价值也开始被更多的游戏开发商所看见。1889年,一家名为任天堂的娱乐公司在日本成立。这家公司成立之初主要负责骨牌扎花的生产,在二十世纪七十年代后期看到电子游戏行业的巨大前景后,开始投身电子游戏行业,主要游戏的开发和游戏机的制造。在之后的十年里,任天堂可谓是硕果累累,推出了许多款堪称经典的游戏,成为最具影响力的游戏平台生产商之一,Atari(雅达利)也逐渐渐渐走向衰落,慢慢退出电子游戏的历史舞台。1994年索尼推出了一款名为PlayStation(简称PS)的32位家用游戏机,这不仅仅撼动了由任天堂所主导的长达十年的电子游戏市场,也大大加快了由2D游戏向3D游戏迈进的全新篇章
19、。随着科学技术的不断进步,个人电脑的性能进一步提升,大大促进了PC游戏的发展。PC游戏的出现对游戏机的改革也起到了十分重要的促进作用。进入二十一世纪,电子游戏行业百花齐放,微软也开始进入大众的视野,凭借着XBox成功打入游戏市场。随着PC游戏的快速发展,许多游戏厂商也看到了电子游戏更多的可能性,研发方向也开始转向多平台研发。2002年,一个名为Steam的游戏集合下载的平台诞生,电子游戏开始在其他平台得到发展。2008年,支持第三方开发的苹果App Store正式上线,为移动游戏的开发奠定了坚实的基础。随着智能手机的推广和普及,移动端游戏也迅猛发展起来。近年来,由于虚拟现实技术不断发展,随之出
20、现了虚拟现实游戏(简称VR游戏),只要你打开游戏,连接虚拟现实设备,带上特定的游戏头盔,你就可以走进游戏的虚拟世界体验身临其境的感觉,使得玩家的代入感越来越强。虚拟现实技术的出现,使得游戏从平面真正走向立体,VR游戏的发展前景也是一片光明的。现如今,电子游戏行业的发展越来越好,游戏的画质和清晰度也在不断提升,游戏的玩法也更加丰富多彩也更加富有剧情,游戏的操作难度也越来越简单化。简而言之,电子游戏行业的发展也正稳步发展中。虽然中国的游戏产业起步相较于国外来说比较晚,但是国内其实不缺乏游戏公司,也不缺乏各种各样的电子游戏。手游和页游开发和制作周期相对较短,投资回报率相对较高,所以我国的电子游戏都是
21、手游和页游居多。目前我国的单机游戏发展势头良好,但似乎这条道路上也充满了各种各样的机遇和挑战。从国内最近几年的主流游戏来看,大众普遍喜爱的还是手游居多,其中比较受欢迎的有王者荣耀、第五人格、阴阳师、和平精英等等。它们大多都有着精美的游戏场景、丰富的游戏特效、富有感染力的游戏情节和绝美的游戏体验。不管是游戏操作体验还是游戏画面都符合了现阶段广大玩家的娱乐需求。如今中国的游戏市场正百花齐放蓬勃发展,玩家对于国产游戏的接纳度也不断提高,已经有相当一部分玩家开始支持优秀的国产游戏。2019年中国游戏产业整体保持稳中向好、稳中有升的良好态势2。根据中国音数协游戏工委(GPC)在2019年12月发布的20
22、19年中国游戏产业报告(2019 China Gaming Industry Report)显示,2019年中国的游戏市场实际销售收入为2308.8亿元,同比增长7.7%,游戏用户规模突破6.4亿人2。国内游戏市场将会越趋于稳定和成熟。第2章 相关技术介绍2.1 开发工具 2.1.1 Unity3D游戏引擎简介说到游戏开发工具,我们首先想到的就是Unity3D游戏引擎,它是众多游戏爱好者和开发者的天堂,它不仅为我们提供了游戏开发中所用到的最基本的功能,还支持各种各样的unity插件,利用这一款游戏开发工具可以使我们更快更好地完成我们的游戏项目设计。它是由Unity Technologies开发
23、的一款具有可视化编辑、属性编辑器以及动态预览功能,以交互图形化为首要方式的综合型游戏开发工具,是一个全面整合的专业游戏引擎3。它可以让开发人员能够轻松创建诸如3D游戏、工业仿真、室内设计、虚拟教育、实时三维动画等类型的应用程序3。Unity3D不仅仅支持3D游戏的开发,对于2D游戏的开发亦同样适合。Unity3D游戏引擎的功能十分强大,支持多种资源格式的导入、支持创建多个基本游戏场景、有用于渲染的粒子系统、丰富的动画系统、物理系统、光照贴图系统以及自动寻路系统。Unity3D游戏引擎还支持三种脚本语言:JavaScript、C#和Boo,开发者可选择自己最为熟悉的一种脚本语言来进行代码的编写工
24、作。另外,在Unity开发的游戏可以一键部署到多个平台当中,游戏的载体也变得越来越多样化。Unity 可将游戏发布至 Windows、Mac、iPhone、WebGL(需要 HTML5)、Windows phone 8 和 Android 平台,移动设备支持虚拟摇杆,大大提高了开发者的开发效率4。Unity3D的自由性大、功能性又好,目前是适用范围最广的游戏引擎,也渐渐成为世界范围内的主流游戏引擎。作为一款强大的游戏引擎,对于游戏开发来说,Unity3D肯定是笔者的首选。2.1.2 3d Max简介3d Max是一款用于三维立体模型创建的软件,其文件的导出格式(.fbx格式)在Unity3D游
25、戏引擎中可以兼容并且使用。3d Max界面清新简洁、操作也相对简单,因此上手也相对容易。另外,它对于硬件系统的配置要求相对较低,大大节省了游戏的开发成本。3d Max拥有强大的角色建模功能以及动画制作的功能,是3D游戏角色建模的一大帮手。2.2 开发语言2.2.1 C#语言简介C#语言作为众多高级编程语言当中的一种,它是由C语言和C+语言衍生出来的3。它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)3。如今电子游戏行业发展得如火如荼,Unity3D游戏引擎也被越来越多地用于游戏的开发当中,而Unity3D游戏引擎目前只支持Java、C#和Boo三种脚本
26、语言,C#语言也是被使用最多的游戏脚本语言。所以说,用C#语言来进行整个游戏的开发就再适合不过了。2.3 游戏开发环境电脑型号 DELL DESKTOP-5M7PV2K操作系统 Win10操作系统处理器 Intel(R)Core(TM)i5-6200U CPU2.30GHz 2.40GHz内存 8GB ( 金士顿DDR3L 1600MHz ) 第3章 游戏的需求分析3.1用户需求分析2020年是多灾多难的一年,在乍暖还寒的二月,一场新冠病毒以迅雷不及掩耳之势在我国武汉爆发并迅速席卷全球。目前,该病毒是众多传染病之中危害最大的一种病毒,它的潜伏期时间长、传播途径广、传播能力强,一旦入侵人体都将有
27、致命的危险。在疫情全面爆发之前,国家迅速做出决策,大到武汉封城,建设小汤山医院,小到小区的人流出入管控,我们每个人都不能置身事外。疫情期间,足不出户都在为国家做贡献,此时游戏就成为了人们消磨时间、自娱自乐的一大利器。本项目主要是一款3D的生存解谜类游戏,属于益智类的解谜闯关游戏。开门是玩家的主线任务,玩家通过角色扮演进入到游戏的世界中,利用场景给出的道具获取线索,通过思考和推敲解决设置在每个关卡中的小谜题,即可完成一个开门任务。通过游戏不仅仅可以让玩家得到娱乐和放松,还可以提高玩家分析问题的能力和逻辑思维能力。3.2功能需求分析在本项目中将要实现的功能有UI界面的设计、玩家的寻路和移动、动画配
28、置、背包系统和事件交互系统。UI界面设计:实现场景跳转、给出帮助信息和退出游戏三个功能玩家寻路和移动:通过寻路网格设置玩家可走区域,实现玩家移动动画配置:为主要的交互道具设置动画背包系统:帮助存储物品道具的基本信息事件交互系统:通过鼠标点击,完成人物与物品道具的交互图3.2 the twelfth door功能图3.3数据存储需求分析在本项目中的数据存储方式主要用到了二进制序列化存储和ScriptableObject类存储两种。其中二进制序列化存储用于一般的物品数据存储,先把需要用到的数据存储到一个类里面,经过封装后,通过外部的方法进行读取和保存。而ScriptableObject类主要用在背
29、包系统的物品数据存储,它是Unity自带的一个类,是一个可存储数据的脚本化对象,是可序列化的。当我们重新运行场景时,可保留这个类里面的数据。图3.2 The twelfth door E-R图第4章 游戏的整体设计4.1 游戏的主要架构设计本项目主要设计了两个场景,分别是开始场景和游戏场景。在开始场景中主要设置了三个Button按钮,分别是Start开始游戏的按钮、Exit退出游戏的按钮和Help帮助按钮。当玩家点击Start按钮时,就会进入切换场景,进入游戏场景。当玩家点击Exit按钮时,退出整个游戏。当玩家点击Help按钮,屏幕中会弹出带有帮助信息的面板,玩家可自行查看游戏玩法等详细信息,
30、点击关闭按钮即可回到开始场景界面。图3.1 游戏整体结构图4.2 游戏的剧情设计在本游戏项目中,该游戏的名字叫“The twelfth door”,顾名思义也可以叫做第十二扇门。游戏的主人公被困在一个房间之中,然而眼前所见并非所有,解开一个房间的门,等待着他的将是下一扇门,当玩家解开所有的门的时候,才会发现这原来是一个巨大的迷宫,走出迷宫才能获得最后的胜利。玩家一开始出生在一个特定的房间里面,通过收集线索和细微的观察,找到属于打开这扇门的所有信息并触发开门的机关,方能走出这个房间进入下一扇门的空间。在游戏场景中我们设置了很多小的物品道具,每一个物品道具都将是解开门的关键信息。4.3 游戏关卡设
31、计在本游戏项目中,只有一个大的游戏场景,并没有明确的关卡切换,只是通过打开游戏场景中的门进入下一个空间,而这个空间也还是在同一个场景中,所以玩家就只能在一个场景中进行活动。玩家开始游戏时,只能在一个房间中活动,但随着玩家解开的门越来越多,活动范围也越来越广阔。游戏规定时长:五分钟游戏规则:玩家通过WSAD或方向键进行移动,鼠标滑动控制摄像机视角,鼠标点击拾取物品并放入背包系统。玩家在五分钟之内,找齐线索解决谜题,打开所有的门并走出迷宫即可获得游戏胜利。若是五分钟倒计时结束,玩家没有打开所有的门或者没有走出迷宫,游戏失败。游戏道具:门、神秘的挂画、火柴、毛巾、精灵之家、宝箱、简笔地图关卡设计(以
32、前面两个关卡举例说明):第一扇门:门的提示信息为隐藏的五角星。利用毛巾擦拭墙上神秘的挂画,找出隐藏的五角星。所用道具:毛巾、神秘的挂画、火柴第二扇门:门的提示信息为精灵之家。打开宝箱,找到6个精灵进入精灵之家,完成精灵之间的对消游戏。所用道具:宝箱、精灵之家第5章 游戏的详细设计与实现5.1游戏的场景搭建5.1.1开始场景UI设计在开始场景中,我们简单设计了一个UI界面。首先在场景中添加Canvas画布,创建背景面板,分别添加Start开始按钮、Exit退出按钮和Help帮助按钮。当玩家点击Start按钮时,跳转到游戏的主要场景中,开始进行游戏;当玩家点击Exit按钮时,退出游戏;当玩家点击H
33、elp按钮时,弹出帮助提示信息面板,玩家可查看帮助提示信息,更好地参与游戏。图5.1.1-1 开始场景图5.1.1-2 帮助信息面板5.1.2游戏场景搭建本项目的场景大部分都是利用Unity自带的Cube搭建完成,以Plane作为地板、Cube作为墙面搭建迷宫。在这个大的场景中,我设计了十二扇门(即十二个关卡),利用墙面和门形成了一个个密闭的空间,在空间内部适当添加一些物体便于玩家快速解谜打开十二扇门。图5.1.2 游戏场景图5.2物品道具的设计5.2.1物品道具动画设置在本项目中,我们为物品设置了动画系统,下面主要以门的动画和宝箱的动画来举例。开门的动画:首先创建一个空物体作为门的一个父物体
34、,打开Animation动画面板,点击Add Propetry,选择Transform/Rotation,点击录制,使得门围绕父物体的Y轴旋转90度,最后去掉勾选Loop Time选项,使其不会重复播放动画,完成开门动画的创建。打开Animator面板,添加一个空的闲置状态,使其一开始就进入这个闲置状态,然后点击Parameters添加一个Trigger并且将其命名为push。在闲置状态(idle)中建立一个新的联系到开门状态(open),点击中间的小箭头,在Inspector面板的Conditions中把名为push的Trigger添加进来。实现效果:门一开始属于闲置状态,当玩家按下push
35、键,开始播放open的开门动画,实现点击按钮播放动画的效果。图5.2.1 开门动画开宝箱的动画:首先从外部导入一个顶部能够分离的宝箱,打开打开Animation动画面板,点击Add Propetry,选择宝箱的顶部box_top并为其设置动画。点击红色小圆点开始录制,设置宝箱顶部先向z轴平移,然后围绕x轴旋转-40度,最后再向z轴移动一小段距离,点击停止按钮,完成打开宝箱动画的设置。最后去掉勾选Loop Time选项,使其不会重复播放动画。图5.2.1-2 开宝箱动画5.2.2物品道具的生成在本项目中,在每一个房间中都会随机出现一种帮助我们得出最后一个密码的道具,在这里我们采用Random.R
36、ange()方法在使其在一个固定的空间里随机生成物体。首先需要定义一个预制体,通过for循环实现需要生成物品的数量,利用Random.Range()方法在X为1到-10,Y为0,Z为-5到22的区域内随机生成物品道具。把CreatProp 脚本挂载到场景中的空物体上,并把需要生成的物品道具拖拽到prefab当中,运行场景得到该范围内随机生成的物品道具。主要代码如下: 图5.2.2 随机生成道具代码5.3 角色的移动Unity中常用的几种实现人物移动的方法主要有以下三种:第一,通过Transforn组件来控制角色的移动,Transforn组件主要提供了三个函数分别是position、rotati
37、on和scale,通过控制position的X、Y、Z的值可以模拟角色位置移动。通过控制rotation的X、Y、Z的值可以改变角色的旋转角度。第二,通过添加刚体组件移动,刚体组件通常带有物理特性,可以更好地模拟角色在力的作用移动。第三,通过添加角色控制器组件来实现人物移动。它可以很好地模拟人物的一些动作,比如上坡、跳跃等等。在本次游戏项目中,我们将使用第三种方法来实现角色的移动。首先,创建一个空物体,命名为Player。在player的子级添加一个capsule,并为其添加角色控制器组件,通过编写人物移动的脚本(PlayerControl),实现角色的移动。主要代码如下图所示:图5.3 角色
38、移动代码5.4摄像机跟随在玩家移动的过程中,要求摄像机跟随玩家移动。我们可以把摄像机拉到player下面,让player作为它的父级,调整摄像机的位置始终在玩家的右后方,这样当玩家移动时,摄像机也会跟着玩家一起移动。在游戏中,玩家通常需要获得更加广阔的有游戏视角,为此可以通过移动鼠标改变摄像机的旋转角度来实现。首先需要通过Transform获取玩家,定义鼠标移动的值和鼠标的灵敏度,在Updata()方法中获取鼠标X轴和Y轴移动的值,当玩家旋转时摄像机也跟随玩家旋转。这里我们还用到了Mathf.Clamp()方法限制摄像机Y轴的旋转。主要代码如下图所示:图5.4 摄像机跟随代码5.5背包系统的实
39、现背包系统是游戏中最常用到的系统之一,游戏背包可以增强游戏与玩家之间的互动。玩家可以通过游戏拾取道具放入背包系统中,打开背包系统,能够直观了解到自己在游戏过程中获得的物品道具。大概思路主要是通过玩家操控鼠标点击获得物品,物品会自动添加到我们的背包当中,背包方格的右下角中展示物品的持有数量,点击背包当中的物品,底栏显示该物品的详细信息。设置按下键盘O键打开或者关闭背包系统,通过鼠标拖拽可实现物品之间的位置交换。使用鼠标拖拽可以调整背包的位置。5.5.1 搭建背包的UI整个背包主要由背包的父级面板、标题、关闭按钮、格子和详细信息五个部分组成。首先创建一个panel面板并调整好适应屏幕的位置,为其添
40、加背景图片,作为整个背包的父级。在父级下面设置一个Image改名为Title作为背包的标题。在父级面板的右上角添加一个关闭按钮,并为其设置点击事件,把整个父级面板拖拽过去,就可以实现点击关闭按钮关闭背包的功能。添加一个panel用于存放格子,并为其添加Grid Layout Group组件,通过调整第一个格子的大小和每个格子之间的空隙来规范每个单元格的大小。最后在父级面板的底栏增加一个text,用于存放物品的详细详情。图5.5.1-1 Grid Layout Group的设置图5.5.1-2 背包UI效果图5.5.2 背包数据存储ScriptableObject是Unity自带的一个类,继承于
41、UnityEngine.Object,在本项目中我们利用它来实现背包系统数据的存储。创建一个新的类Item,用于存放物品的所有属性信息,例如物品的名字(itemName)、物品的图片(itemImage)、物品的数量(itemHeld)、物品的详细信息(itemInfo)。主要代码如下图所示:图5.5.2 Item类创建一个新的脚本Inventory,用List列表存储我所有的物品。大概思路是当游戏角色的鼠标点击到世界地图上面的物品之后,List列表中的物品增加一个,查看当前点击到的物品分别属于那个类,并把item获取进来。首先把物品放置在场景中,为该物品添加一个Box Collider组件并
42、勾选Is Trigger,编写添加物品到背包中的代码。利用 OnMouseDown()方法判断鼠标是否点击了该物品,如果鼠标点击了该物品,则在List列表中存储该物品的相关信息。如果List列表中已经含有该物品信息,则在该物品原有数量的基础上增加一。最后把游戏世界当中的物品销毁,并把代码挂载到需要碰撞的物品上面。主要代码如下:图5.5.2-1 Inventory代码图5.5.2-2 点击添加物品代码5.5.3 展示物品信息创建一个新的脚本Slot,继承Item里面的属性,把脚本挂载到prefab上。在Slot方法中添加一个ItemOnClicked()方法,用于实现点击背包上面的物品弹出该物品
43、的详细信息。主要代码如下:图5.5.3 Slot代码新建一个脚本Inventory Manager主要用于控制我们的背包并把脚本挂载到Canvas上。用List列表存放生成的格子,在UpdateItemInfo()方法中,更新物品的详细信息。用 RereshItem()方法获取到ItemLIst里面所有的信息,然后把这些信息传给Slot类,最后在prefab里面展示这些信息。主要代码如下:图5.5.3-1 Inventory Manager代码图5.5.3-2 Inventory Manager代码5.5.4 实现鼠标拖拽物品打开背包,可以通过鼠标拖拽移动背包中物品的位置,如果拖拽到的格子里面
44、没有物品,则直接把物品存放在拖拽的格子中;如果拖拽的格子中已经有物品,则格子中的物品与鼠标拖拽的物品位置发生交换。新建一个新的C#脚本,使用UnityEngine.EventSystem事件管理库里面的三个方法,完成拖拽。首先使当前物品的位置等于鼠标点击的位置,使用SetParent()方法更改物品的父级,使其不会被其他的格子挡住。在拖拽过程中,我们需要判断物品重新放置的位置,这里我们会使用鼠标判断射线的方法来实现。假设我们通过点击鼠标拖拽物品时,我们的Main Camera会在按下鼠标的这个位置向屏幕的方向发射一条射线,在最上面的一层会被射线碰撞到,返回这个物品的一系列信息,比如说物品的名字
45、、图片等等。在预制体slot中挂载一个Canvas Group组件,开始拖拽时需要设置Blocks Raycasts为false,这样就可以获得我们当前拖拽的物品信息。在拖拽过程中和结束拖拽时,需要设置设置Blocks Raycasts为true,获得拖拽后格子的物品信息,完成物品位置的交换。主要代码如下图所示:图5.5.4-1 鼠标拖拽物品图5.5.4-2 鼠标拖拽物品图5.5.4-3 鼠标拖拽物品5.6线索提示5.6.1 直接线索在本项目中是主要通过找出设置在每一个房间中的答案信息从而打开各个房间的门,所以线索提示就显得尤为重要。例如:在第一个房间中,玩家鼠标移动到门的位置,屏幕就会给出一
46、条提示信息,提示第一个房间中的信息就是要找到隐藏的五角星;鼠标离开则提示信息自动消失。首先我们在Canvas画布中添加一个panel,在panel中添加一个text,把我们需要给出的提示信息记录在text中。这个时候我们需要用到的是UI事件当中的Pointer指针事件,当我们的鼠标指针与UI物体进行接触时,就会触发相应的指针事件。也就是说,当鼠标移动到该物体上,屏幕给出相应的提示信息;当鼠标离开该物体,屏幕上面的提示信息对应消失。主要代码如下:图5.6.1-1 鼠标指向给出提示信息图5.6.1-2 线索提示效果5.6.2 游戏线索在本游戏中除了鼠标检测到物体给出的直接线索外,还设计了游戏线索,
47、即通过完成简单的游戏来获得线索。例如在第二个关卡中,我们设置了简单的对消游戏,玩家通过每次点击两张卡片,完成对消,获得开门的密码。若点击的两张图片相同,则显示成功的图片;若两张图片不相同,则返回可重新点击。图5.6.2 线索提示效果5.7响应事件Unity游戏引擎中提供了一套完整的事件响应系统,因此我们可以很好利用它来实现的我们所需要的功能。例如:在第一个房间中,玩家需要找到隐藏的五角星方能打开第一扇门。主要设计方案是当玩家找到隐藏的五角星(即点击五角星所在区域),第一个房间通关成功,第一扇门自动打开。首先我们要在场景中添加一个EventSystem,然后在挂载Main Camrea的play
48、er中添加一个Physics Raycaster组件,添加一个Cube将它设置为按钮并添加box collider碰撞组件,最后添加Event Trigger组件,把预制体Door1拖拽到Event Trigger组件当中,选择Animator.SetTrigger方法,实现点击button按钮打开门,并播放开门的动画。图5.7 Event Trigger的配置5.8 数字密码锁的设置在本游戏项目中,我们用到了很多输入数字密码开锁的功能。在游戏场景中,当玩家拿到解锁的密码后,这时候就需要进一步的解锁动作,这里我们用数字密码锁实现。大致思路是当玩家输入正确的数字密码,点击确定按钮,可成功打开门或
49、者宝箱。当玩家输入的密码错误,点击确定按钮,则提示密码错误,请重新输入。首先我们设置一个Panel为其命名为password;在password的下一级添加一个Image,为其放入图片,作为密码框的背景图;在Image的下一级设置一个button,修改名称为button1,调整好位置及大小;随后将button1复制10个,调整好每个button的位置,并按照数字一到十进行命名。然后创建一个新的脚本password,设置本轮的密码为“1234”,定义一个当前输入密码并将其设置为空,当按下button1按钮时,当前密码增加1。直到当前密码等于我们一开始设置的密码,就判定为输入密码正确,并播放打开门
50、或宝箱的动画。最后,把我们的脚本password挂载到一个空物体上,在每一个button中添加On Click()点击事件,选择按钮的对应的方法,运行场景查看效果。主要代码如下图所示:图5.8-1 password代码图5.8-2 数字密码的实现第6章 游戏测试游戏测试在整个游戏开发过程中发挥着不可估量的作用,是必不可少的。软件测试,旨在让我们找出在开发过程中察觉不到、容易忽视的bug,并与开发人员沟通反映问题所在,以免造成不必要的损失。在本项目中,我们也做了简单的游戏测试,组要是游戏的功能测试。6.1游戏功能测试功能测试主要是根据游戏项目中的功能点进行测试,因此需要先列出测试的功能点:开始游
51、戏、退出游戏、帮助、角色基本操作、摄像机跟随、点击拾取物品、移动鼠标获取线索信息、播放动画。用例编号用例名称用例步骤预期结果实际结果001开始游戏进入开始场景,点击start按钮成功进入游戏场景成功进入游戏场景002退出游戏点击exit按钮成功退出游戏成功退出游戏003帮助进入开始场景,点击help按钮弹出帮助信息面板,并显示帮助信息弹出帮助信息面板,并显示帮助信息004角色基本操作进入游戏场景,按下WSAD或方向键角色移动正常角色移动正常005摄像机跟随进入游戏场景,使玩家进行移动摄像机跟随玩家移动摄像机跟随玩家移动006点击拾取物品道具进入游戏场景,找到一个物品道具,点击鼠标左键拾取物品道
52、具成功,并添加到背包中拾取物品道具成功,并添加到背包中007移动鼠标获取线索信息进入游戏场景,鼠标移动到含有线索信息的物品上获取线索信息成功获取线索信息成功008播放动画进入游戏场景,触发播放动画按钮动画播放正常动画播放正常表6.1 功能测试用例表第7章 总结与展望7.1总结之前一直忙于实习,我开始做毕设的时间也比别人晚上很多。加之实习的工作内容并非与游戏相关,缺乏练习,很多之前在课堂上学到的东西也开始渐渐落下。我的毕设刚开始进行就困难重重,缺乏新鲜好玩的想法、开发时间不足和知识积累不够充分都是我需要一个个攻克的难关。办法总比困难多,为了寻找游戏开发的灵感,我常常去b站看别人的游戏视频,去喜马
53、拉雅听解谜类的有声小说,最终在一个名叫死亡万花筒的广播剧中找到了要设计十二扇门的想法。开发时间不够,我就决定辞掉我的实习工作,开始在家安心做游戏。知识点不牢固,我特地花时间重新学习了老师之前在超星学习通上面录制的网课视频,阅读了许多优秀毕业生的论文和作品集,这对我后续的游戏开发和论文编写都起到了非常重要的作用。游戏开发的过程同时也是我不断积累和学习的过程,过程虽然苦,但苦尽终会甘来。在实现的过程中,我学到了很多很多。从需求分析到整体设计再到最后的详细设计,我都尽自己的最大努力做到最好,丝毫不敢懈怠。诚然,知识的二次吸收比第一次的难以理解要快速很多。曾经我以为难以理解的动画系统如今我可以很快做出来,曾经我以为要实现一个功能就必须通过代码实现,如今我却认识到了很多Unity自带的功能,可以通过简单地拖拽就可以实现。通过这次的毕业设计,我不仅仅回归了课堂的知识,另外还学习到了很多新的知识。7.2展望目前游戏行业发展迅猛,各种优秀的游戏如雨后春笋般涌现,要想在游戏行业闯出自己的一片天地也不是一蹴而就的事情。单凭我一人之力恐怕也难以完成一个大型的游戏,这就需要整个开发团队的通力配合,以富有创意的想法和对游戏持之以恒的热爱方能博得广大玩家的青
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026人工智能语音识别技术研发领域市场发展现状竞争格局及投资评估规划分析研究报告
- 2026中国玩具模具设计行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国休闲食品健康化转型消费偏好与渠道创新趋势分析报告
- 2026中国智能交通设备行业市场开发商机与投资组织规划分析研究报告
- 2026中国智慧灯杆多功能集成与城市管理应用前景展望报告
- 2026中国游戏产业电竞市场行业生态资本布局分析研究文档
- 2026中国增材制造材料制备工艺技术创新市场需求行业竞争力发展前景研究报告
- 2026人工智能视觉检测行业市场现状供需分析及资金评估规划分析报告
- 伊春市伊春区黎明小学一年级数学加减法练习题
- 2026中国智能生活服务平台行业市场现状供需分析及投资评估规划分析研究报告
- 企业人力资源共享服务
- 常规理化检测培训课件
- 超导材料行业深度:制备工业、市场规模、产业链及相关公司深度梳理
- GB/T 13814-2025镍及镍合金焊条
- 采购内部审计管理办法
- T/CCSAS 024-2023化工企业设备及管线打开作业实施指南
- 反恐验厂管理手册程序文件制度文件表单一整套
- DL∕T 1379-2014 电力调度数据网设备测试规范
- SL-T+291-2020水利水电工程钻探规程
- 2024年湖北农谷实业集团有限责任公司招聘笔试冲刺题(带答案解析)
- 电梯维保方案完整版
评论
0/150
提交评论