




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-2"\u第1章 引言 11.1 选题背景与意义 11.2 国内外研究现状 21.3 本文的研究内容与主要工作 41.4 本文的论文结构与章节安排 5第2章 需求分析 72.1 游戏概述 72.2 用户需求 82.3 游戏功能性需求 102.4 游戏非功能性需求 122.5 本章小结 14第3章 游戏总体设计 153.1 游戏地图与物品设计 163.2 游戏背包设计 193.3 游戏农作物行为设计 203.4 游戏NPC与对话框设计 223.5 游戏买卖交易 253.6 游戏的存储与加载 253.7 本章小结 29第4章 游戏测试与优化 304.1 游戏功能测试 304.2 游戏优化 324.3 本章小结 34第5章 总结与展望 355.1 工作总结 355.2 研究展望 36参考文献 37附录 41随着社会的进步,游戏行业已经成为文化发展产业,已经被越来越多的人所认可。游戏行业的发展虽然没有像电影产业那么久,但发展也是十分迅速的,游戏种类已经变得多样化,游戏传统意义上分为角色扮演游戏,动作角色扮演游戏,模拟角色扮演游戏,冒险游戏,动作冒险游戏,动作游戏,第一人称射击游戏,FPS(First-personshootinggame)格斗游戏,FTG(FightTechnologyGame)射击游戏,即时战略游戏等等,多种类的游戏吸引着不同年龄段人群[1]。像素风格的游戏在近年来备受玩家青睐。这种风格以简洁的像素化画面和复古的游戏玩法而闻名,能够唤起玩家们对于早期游戏的怀旧情感。RPG游戏(Role-playinggame(角色扮演类游戏))更是受到广大玩家的喜爱[5]。《星露谷物语》是一款经典的像素RPG游戏,以其独特的艺术风格、引人入胜的剧情和丰富的游戏体验而深受玩家喜爱。随着Unity引擎的不断发展和普及,利用该引擎开发《星露谷物语》风格的游戏成为了一种可能。因此,对于如何利用Unity引擎开发类似《星露谷物语》风格的像素风RPG游戏进行深入研究具有重要意义。通过研究该主题,可以为游戏开发者提供关于如何利用Unity引擎开发像素风格游戏的实用指导,同时也可以为玩家提供更多优质的游戏作品。此外,本论文还可以为游戏行业的发展提供有益的参考和借鉴,推动像素风格游戏在市场上的进一步发展和壮大。通过深入研究如何利用Unity引擎开发像素风RPG游戏,可以为游戏行业的技术创新和游戏设计提供新的思路和方法,有助于推动游戏行业的发展和进步。在国内,随着游戏产业的快速发展,像素风格的游戏也逐渐受到了更多玩家的喜爱。许多国内游戏开发团队开始尝试利用像素风格来设计游戏,并取得了一定的成功。例如,《风来之国》是一款我国独立游戏开发者制作的像素风格动作游戏,以其出色的游戏画面和精彩的剧情而备受赞誉。该游戏在国内外都获得了广泛的关注和好评,为中国独立游戏开发带来了极大的鼓舞。如图1-1所示为《风来之国》的游戏的截图。图1-1风来之国《红色警戒》是一款经典的即时战略游戏,它采用了像素风格的游戏画面,成为了中国游戏史上的经典之作。该游戏在中国游戏市场上取得了巨大的成功,不仅在游戏玩法上有着创新,还在游戏画面和音乐上有着突出的表现。图1-2为《红色警戒2》截图。此外,一些知名游戏公司也开始关注像素风格游戏的开发,推出了一些备受关注的作品。图1-2红色警戒2在国际上,像素风格的游戏近年来备受关注和青睐。许多知名游戏开发商和独立开发者都推出了一系列优秀的像素风格游戏,如《洞穴物语》、《星露谷物语》等,这些游戏不仅在市场上取得了成功,而且也在游戏界引起了一定的影响。《星露谷物语》是一款由独立开发者ConcernedApe开发的游戏,它取得了极大的成功和认可。图1-3为《星露谷物语》。图1-3星露谷物语这款游戏在全球范围内都受到了玩家和评论家的高度赞扬,获得了多个游戏奖项和荣誉。这些游戏以其独特的艺术风格、简单的操作方式和丰富的游戏内容吸引了大量玩家的关注,成为了游戏行业中的一股新的风潮。图1-4为《星露谷物语》官网在2022年显示介绍界面,这款2016年上市的游戏仅仅花了五年时间就售出了两千万份。图1-4星露谷物语2022年的官网介绍本课题的主要内容包括以下几个方面:游戏设计:根据像素风格与RPG游戏的特点,设计游戏的剧情、角色、任务系统、游戏机制等。通过精心设计的游戏内容,吸引玩家并增强游戏的可玩性和趣味性。游戏美术:配以合适的像素风格游戏画面,包括角色、地图、道具等元素。通过像素画风,营造出独特的游戏氛围。游戏编程:Unity3D作为一款分层级的综合性游戏开发引擎,功能全面[2]。利用Unity引擎的功能结合CSharp语言,实现游戏的各项功能,包括角色控制、游戏逻辑、任务系统、存档与载入等。在游戏开发中,脚本通常是一种可编译的独立于游戏系统内其他可执行程序的编程语言,它是一种为了简便、直观、清晰和准确的控制游戏内其他软件应用而编写的程序[7]。通过编写代码,打造一个稳定且流畅的游戏系统。音效与音乐:配以适合游戏氛围的音效和背景音乐,提升游戏的沉浸感和情感表达。本文共分为5章,章节内容安排如下:第1章引言阐明论文选题的背景及其意义,介绍了当前研究国内与国外的发展现状,也概括了本次论文研究的主要内容和主要工作,对论文的结构和安排也给予了回答。第2章需求分析先是简要说明游戏特点,然后对目前用户的需求,游戏功能性的需求,以及游戏非功能性的需求进行分析。第3章游戏设计是游戏的实现过程,先从需求分析的结果进行游戏的整体架构设计,再以整体架构为蓝图一步一步实现游戏的功能与模块。第4章游戏测试与优化是游戏完成的阶段式标志,也是制作游戏必不可少的环节,通过对游戏提出的功能进行测试来验证游戏的稳定性是否可靠。对于不稳定或者出BUG的问题进行优化和修复。第5章是总结与展望,是对自己毕业论文的总结和对未来研究的展望。本章简要概括了2D像素风RPG类的游戏的特点并通过分析问卷调查的结果对用户进行需求分析,了解了用户玩家对于此类游戏的功能性需求和非功能性需求,为后面的游戏设计指明方向。2D像素风RPG类游戏,作为一种独特的游戏类型,在电子游戏界中占据了不可忽视的地位。这类游戏以其简约而精致的像素图形为特色,为玩家展现了一个充满奇幻色彩与创意的虚拟世界。经典的2D像素风RPG类游戏,之所以能够深入人心,很大程度上归功于其独特的像素化图形风格。这种风格不仅简约,而且极富个性,使得每一个像素都仿佛蕴含了无尽的故事与情感,极大地激发了玩家的怀旧情绪,让他们仿佛回到了那个充满探索与冒险的游戏黄金时代。这类游戏通常提供了丰富多样的人物角色供玩家选择,每个角色都有其独特的性格、技能和背景故事,使得玩家可以根据自己的喜好和策略来选择最适合自己的角色。同时,游戏中还包含了各种系统,如装备系统、技能系统、任务系统等,这些系统相互交织,共同构成了一个庞大而复杂的世界观。在游戏中,玩家通常需要通过完成任务、与敌人战斗以及探索未知区域来提升自己的角色等级。随着等级的提升,玩家可以解锁新的技能和装备,进一步增强角色的战斗力,使得游戏体验的深度和长期可玩性得到了极大的提升。然而,尽管这类游戏有着诸多优点,但也存在一些问题。很多2D像素风RPG类游戏在玩法上过于单一,随着玩家进一步探索和升级,游戏中的任务和敌人可能会变得重复和枯燥,缺乏新意和挑战性。这可能导致玩家在长时间游戏后感到乏味和缺乏动力,从而影响游戏的整体体验。为了解决这些问题,本次游戏设计尝试在保持2D像素风RPG类游戏经典元素的基础上,引入更多的创新元素和玩法。我们希望通过这些改进,让玩家在享受简约而精致的像素风格的同时,也能够体验到更加丰富多彩的游戏内容和更加深入的游戏体验。为了更好地了解用户对于2D像素风RPG这类游戏的需求,我们采取了问卷调查的方式进行调研。在这次调查中,我们积极邀请了尽可能多的玩家参与,包括身边的朋友和游戏群中的玩家,以确保获取更全面和多样化的用户需求。问卷调查是一种常用的数据收集方法,通过设计针对特定主题的问题,我们能够了解到玩家对于2D像素风RPG游戏的期望、偏好和需求。在调研的过程中,我们注重保护用户的隐私和数据安全,确保调查结果的真实性和保密性。我们确保用户信息的匿名性,仅用于统计和分析的目的,并在调查过程中严格遵守相关法律和道德规范。对于2D像素风RPG类的游戏的需求调查,我们选取了网络科普和市面上经典游戏中热度较高的十一个功能需求进行问卷编写。这十一个需求中,有五个游戏功能性需求,六个游戏非功能性需求。通过多选并且不限制选择数量的方式对答卷者进行提问,在问卷星上进行问卷发布,问卷样式如图2-1所示。图2-1问卷样式本次问卷调查持续两个星期,一共有200位用户参与了调查问卷结果如图2-2所示。图2-2调查结果图2-3条形图通过条形图图2-3,我们可以直观地看出游戏流畅、音乐与音效、界面简洁都达到了惊人的87%,这说明:游戏流畅性、音乐与音效、界面简洁三个非功能性的需求是大多数玩家觉得必不可少的条件,而对于游戏功能性的需求,游戏的自由度、任务系统、商店交易是玩家们比较看重的。游戏的功能性需求是本项目基本的指导原则,是游戏需要完成的基本的功能,其需求一方面来源于前面对于2D像素风RPG游戏的需求问卷调查,另一方面来源于现在市面上主要的2D像素游戏的一般功能,最后根据自己想法制作,主要包括:背包系统、农作物系统、NPC系统、交易系统、存储系统等功能需求。游戏设定为模拟经营类的2D像素风RPG种田游戏,玩家通过自己发掘种植农作物来收获游戏币,在用于植物种子和家具的购买,如此反复来收获自己的快乐。图2-4表示《麦田物语》的模块设计构成图。图2-4游戏模块图在任何RPG类型的作品中,背包系统无疑是构成游戏体验不可或缺的一部分,它不仅是游戏功能性需求的核心组成,更是玩家管理、规划与升级角色的关键工具。这个背包系统不仅是一个简单的物品存放空间,更是一个综合管理平台,让玩家能够有序地整理与利用他们在游戏世界中获得的各类物品和装备。背包系统具备物品存储和管理的功能:玩家在游玩过程中收集到的各类物品,如武器装备、消耗品、任务物品等,都可以井然有序地存放于背包之中。背包系统支持物品的使用和丢弃操作:玩家可以根据自己的需要,随时从背包中取出并使用各种物品。同时,对于那些不再需要或已失去价值的物品,玩家也可以选择将其丢弃或销毁,以释放背包空间,为新的物品腾出位置。背包系统承载着装备穿戴和切换的重要任务:玩家可以从背包中选择合适的装备,将其穿戴到角色身上。本次项目设计我根据自己的想法制作一款可种田的2D像素风RPG游戏,农作物系统是该类型游戏中一个重要的功能性需求,它模拟了真实的农业种植过程。以下是一些与农作物系统相关的功能:农作物种植:玩家可以选择不同类型的农作物进行种植,如小麦、水稻、玉米等。种植过程可能包括准备土地、播种、施肥和浇水。生长周期:农作物系统应该模拟农作物的生长周期,并根据实际时间或游戏内设定的时间来确定生长的速度和阶段。不同的农作物可能具有不同的生长周期。收获和销售:当农作物成熟时,玩家可以进行收获,并将其出售或加工为其他产品。游戏的NPC(non-playercharacter)系统是一个重要的功能性需求,NPC会根据游戏剧情来触发,由程序设定,他们可能会在地图上巡逻,与玩家对话[11]。以下是一些与NPC系统相关的功能:对话和互动:玩家可以与NPC进行对话和互动。NPC会提供各种对话选项,包括接受或拒绝任务、购买或出售物品、获取信息等。任务系统:NPC系统通常与游戏中的任务系统密切相关。NPC可以充当任务发布者,向玩家提供各种任务和目标,并在任务完成后给予奖励。AI行为:NPC应具有基本的人工智能行为模型,使其能够在游戏世界中自主移动、执行任务、避开障碍物等。日常生活模拟:一些NPC可能会模拟日常生活,可以增加游戏世界的真实感。游戏的交易系统是一个重要的功能性需求,它允许玩家在游戏中进行物品和货币的交换。以下是一些与交易系统相关的功能:货币系统:交易系统应该有一种货币体系,以便玩家可以用货币来购买物品。这可能包括游戏内的虚拟货币,如金币、钻石等。价格设定:交易系统应该能够根据物品的稀缺程度、需求和供给等因素设定合理的价格。游戏的存储系统是一个重要的功能性需求,它用于保存和管理玩家的游戏进度和数据。以下是一些与存储系统相关的功能:存档和加载:存储系统应该允许玩家进行游戏存档,以保存当前的游戏进度和状态。同时,还应该提供加载功能,使玩家能够随时恢复到之前保存的游戏进度。多个存档槽:存储系统可以支持多个存档槽,以便玩家可以创建和管理多个不同的游戏存档。这样玩家可以尝试不同的游戏进程或保存多个角色的进度。游戏非功能性需求主要从用户体验性进行入手,根据2D像素风RPG游戏的需求问卷调查的情况,主要包括:界面简洁、流畅性。要使游戏界面简洁,考虑以下几个方面的设计和优化:精简布局:避免在界面上堆砌过多的元素和信息。使用简洁的布局,将核心内容置于显眼的位置,确保主要功能和信息易于找到。清晰的导航:设计直观的导航菜单或按钮,使玩家能够轻松浏览和访问各个界面和功能。减少层级结构,尽量让用户通过少数的点击即可达到目标。简洁的图形和图标:使用简单、明确的图形和图标来代表特定的功能或信息,以便玩家能够快速理解并操作。符合主流玩家的操作习惯。游戏容易被玩家接受,通过新手训练、文字指导等方式能够被玩家快速地掌握[9]。避免复杂或过度装饰性的图形,以免给玩家造成困扰或分散注意力。易读的字体和颜色:选择易读的字体样式和大小,确保文字清晰可见。使用合适的对比度和颜色组合,以增强可读性,并提供清晰的信息传达。为了使游戏运行流畅,考虑以下几个方面的优化:图形和渲染优化:优化游戏的图形和渲染效果,合理控制模型的多边形数量、纹理质量和特效的使用。代码和算法优化:对游戏的代码进行优化,使用更高效的算法和数据结构。避免频繁的循环和计算,并尽可能减少资源的加载和处理。多线程处理:合理利用多线程技术,将耗时的任务和计算分配到不同的线程中,以提高游戏的并发和响应性能。游戏逻辑优化:优化游戏的逻辑处理流程,减少不必要的计算和判断。避免重复执行相同的逻辑和操作。在本章中,探讨了玩家对于2D像素风格RPG类游戏的需求。为了获得更为准确和全面的数据,设计并实施了一份问卷调查。通过问卷的发放与回收,我们收集到了大量宝贵的数据。在仔细分析这些数据后,我们发现玩家对于2D像素风格RPG游戏的需求呈现出多样化的特点。除了功能性需求外,我们还对游戏的非功能性需求进行了深入的探讨。这些需求涉及到游戏的稳定性、流畅性、兼容性以及安全性等方面。在实现用户需求的目标下,本章主要介绍游戏项目的核心模块和各个部分的设计和各部分的核心代码,通过搭建完整的游戏框架,为游戏提供稳定性和可扩展性。如图3-0表示游戏总体框架。图3-0游戏总体框架场景是游戏的核心,直接关系到游戏开发的成败[8]。游戏场景是烘托游戏氛围、塑造游戏世界观的重要因素,起到确定空间关系、交代环境的作用。游戏场景的设计要符合前期美术要求,服务于游戏角色交互[4]。本文的地图设计选用了2D形式,核心依赖于TileMap功能。通过TileMap功能,能够更加便捷高效地完成整个地图的渲染工作。在本次设计中,特别采用了多层的TileMap来构建地图,以丰富其层次感和细节表现,分为地面层(Ground)、装饰层(dec)、功能层(Dig和Water)、实例层(Instance)、上层(Front)和碰撞层(Collision)。采用多层管理能够更有效地实现各部分的功能划分,这种管理方式下,各层之间的界限往往比较清晰。通过将各层功能进行分块管理,可以更精确地控制每一层的功能和表现。接下来,为了确保各层在渲染时能够按照预期的顺序呈现,为每层设置层级关系,并灵活运用SortingLayer或调整不同层的OrderinLayer来调整图层的渲染顺序。在本次设计中,将综合运用这些方法,以使得图层的分级更加显著,提高整体的视觉效果和用户体验。分层实现如图3-1所示。图3-1地图分层为了方便实现对图层上的功能层的判定,在Grid下添加了一个未启用的GridProperties用来绘制功能层的生效区域,其下四个功能层分别是:CanDig,是否可以被角色的锄头给挖取。CanDropItem,是否可以被角色丢弃在此处。CanPlaceFurniture,是否可以被角色放置家具。NPCObstacle,是否是NPC的障碍。实现效果如图3-2所示图3-2设置功能层使用Tilemap的TilePalette绘画板进行地图的绘制的全流程,通过分层绘画的方法在Ground1层绘制基层,泥土。在Ground2层绘制小草,在Ground3层绘制山峰。以此类推。平面地图画完后在地图上添加树木、石头野花野草的预制体。绘制地图大致如图3-3所示。图3-3地图大致样式游戏物品设计是一个非常重要的环节,它可以为游戏增加趣味性和挑战性。物品作为实例物体,要根据游戏内容创建物品信息。这里我们在脚本DataCollection中为其创建类ItemDetail,用于创建物品的基本信息。随后用CreateAssetMenu()函数在菜单中创建ItemDetailsList,方便进行物品信息的添加和填写。如图3-4所示。图3-4物品细节然后不断添加完善游戏内物品的信息,即完成了我们对游戏物品的设计。背包用于管理游戏中的物品。在游戏开发中编写脚本模块是为了提高系统的扩展性和安全性[12]。设计背包首先实现背包的数据结构,在DataCollection中为其创建类InventoryItem,同样的用CreateAssetMenu()函数在菜单中创建InventoryBag用于存储物品信息。创建脚本InventoryManager实现对背包数据的管理。背包的数据管理需要两个最基本的功能:背包物品的检查和物品的添加。定义函数CheckBagCapacity()来检查背包是否有空位,定义AddItem()进行背包数据的添加。代码详情见附录。本项目的背包UI是在视图中创建Canves实现,设计背包系统的展示界面,根据需要在画布上添加所需文本与按钮以及核心背包栏位界面,名称为Inventory,如图3-5所示为背包整体界面图。图3-5背包UI在Canves下创建PlayerBag,在PlayerBag下继续创建三个Image子物体:SlotHolder、HeadHolder、Coin,其中SlotHolder表示背包系统的物品栏格子,在构建背包系统的物品栏格子时,首先将每一个格子设定为Item类型,并为它们分配预设的prefab副本。接着,复制多个这样的副本,以便形成物品栏的多个格子。之后,按照预定的顺序对这些格子进行命名修改,并在背景中创建它们,从而形象地代表每一个物品存放的格子。这样的设计使得背包系统的物品管理更加直观和便捷。HeadHolder表示背包右上角的玩家头像,Coin表示背包左上角的金币UI。除了PlayerBag作为角色的背包UI还需要有一个ActionBar用来显示玩家需要快速用到的物品。在Canves下创建ActionBar,添加十个Slot_Bag创建为玩家的快速物品栏,实现如图3-6所示。图3-6快捷物品栏游戏的农作物是本游戏玩法中非常重要的一环,在Script文件夹下创建Crop文件夹来专门创建农作物相关的脚本。创建CropDetails脚本来定义农作物的信息。在CropDetials脚本里为了快速方便管理游戏内的农作物,设置了一个物品id用来作为物品的索引用来快速获取农作物的基本信息,再为其添加农作物不同阶段所需要花费的天数和对应的不同阶段的植物所需的图片,添加一个季节属性来设置农作物种植需要的季节,添加特定的收获工具来收获特定的农作物果实,根据工具操作次数进行收获、播放动画效果、生成果实等功能然后继续创建CropDataList_SO脚本来创建农作物的信息列表,效果如图3-7-1所示,图3-7-2为局部细节。图3-7-1农作物信息图3-7-2农作物局部信息农作物种子在游戏时间变化中会有相应的生长过程变化,在对应的时间替换农作物对应的sprite,以完成农作物的生长。如图3-8表示为土豆生长图片。图3-8土豆生长图片接下来,将着手实现游戏中的一个重要功能——利用工具对农作物进行收割。在游戏开发的过程中,这涉及到多个层面的设计与编程。需要在CursorManager脚本中添加相应的逻辑,用于判断当前玩家所使用的工具是否具备收割农作物的功能。这涉及到对玩家所持有工具的识别,以及工具属性中是否包含收割农作物的能力。需要确定每种农作物需要收割的次数。不同的农作物可能有不同的生长周期和成熟程度,因此需要设定不同的收割次数。这需要在游戏的数据结构中为每个农作物设定一个属性,记录其需要被收割的次数。当玩家点击鼠标进行收割时,需要处理鼠标点击事件。这个事件会触发对农作物信息的查询,包括其位置、种类以及当前的状态。然后,我们会根据这些信息判断农作物的Sprite(精灵图像)是否处于可收获的状态。如果农作物已经成熟,可以收割,那么我们就需要执行收割的逻辑。收割逻辑的实现会涉及到多个步骤。首先,会从场景中移除农作物的Sprite,表示它已经被收割。同时,会播放一个收割的动画效果,增强游戏的视觉体验,让玩家能够直观地看到收割的过程。接着,会根据农作物的种类生成相应的果实,并将其放置在原本农作物的位置上。这样,玩家就可以收集这些果实,作为游戏的收获。NPC加入可以很好的丰富游戏的内容,对NPC的行为进行日常生活的模拟可以增加游戏的真实感。对于角色,获取Animator组件,编写玩家对于角色的控制,使玩家能够使用输入设备来操作该角色[6]。对于NPC,使用AStar算法来模拟NPC的日常生活移动。AStar算法是一种路径规划算法,其思想包含了Dijkstra算法和启发式算法。该算法从起点开始,逐步记录能够搜索到的节点,并记录它们离起点的最短距离,同时还会估算搜索到的点离终点的距离。其核心在于使用代价函数f(n)=g(n)+h(n)来评估每个节点的代价,其中g(n)表示起始点到节点n的实际代价,h(n)表示节点n到目标点的估计代价。AStar算法通过开启列表和关闭列表来管理搜索过程。开启列表存储当前寻址到的节点,这些节点包含g、h和f的值,并在随后的迭代搜索中可能会更新。每次寻址过程中,会有新的节点存入开启列表,同时会有一个节点从开启列表移动到关闭列表中。关闭列表中的节点来自开启列表,这有助于减少算法迭代的次数,提高性能。AStar算法在静态路径中用于求解最优路径,是有效的直接搜索算法。首先进行数据结构的创建,创建Node脚本进行节点创建,再创建GridNodes脚本用来管理网格中所有的节点。接着创建AStar脚本进行算法实现,其中评估周围8个点,并生成对应消耗值的实现如下:privatevoidEvaluateNeighbourNodes(NodecurrentNode){Vector2IntcurrentNodePos=currentNode.gridPosition;NodevalidNeighbourNode;for(intx=-1;x<=1;x++){for(inty=-1;y<=1;y++){if(x==0&&y==0)continue;validNeighbourNode=GetValidNeighbourNode(currentNodePos.x+x,currentNodePos.y+y);if(validNeighbourNode!=null){if(!openNodeList.Contains(validNeighbourNode)){validNeighbourNode.gCost=currentNode.gCost+GetDistance(currentNode,validNeighbourNode);validNeighbourNode.hCost=GetDistance(validNeighbourNode,targetNode);//链接父节点validNeighbourNode.parentNode=currentNode;openNodeList.Add(validNeighbourNode);}}}}}首先,通过传入当前节点的坐标获取当前节点的位置信息。然后,使用两个嵌套的for循环遍历周围的8个点,包括当前节点自身。在循环内部,首先判断当前相邻节点是否为有效节点(即不超出地图范围)。如果是有效节点,则进一步判断该节点是否已经加入到开放列表中。如果相邻节点未被加入到开放列表中,则需要为该节点计算消耗值。消耗值由两部分组成:gCost和hCost。gCost表示从起始节点到当前节点的实际消耗,通过将当前节点与父节点的gCost相加得到。hCost表示从当前节点到目标节点的预估消耗,通过调用GetDistance函数计算得到。然后,将当前节点设置为相邻节点的父节点,并将相邻节点添加到开放列表中。返回游戏中对AStar脚本的功能进行测试,让两点之间的最短路径在地图上显示出来,如图3-8-1所示。图3-8-1测试AStar算法在地图上的显示为角色和NPC互动过程中田间对话框,提高游戏的可理解性。首先创建对话框的UI,在UI场景中创建DialoguePauel,设置子物体TalkBox、FaceLeft、FaceRighti、Continute,为其添加相应的Sprite。效果如图3-9所示。图3-9角色对话框效果图随后创建DialogueUI脚本,获取面板上的子物体,创建DialogueController脚本用于控制对话框。在进行游戏交易时需要弹出交易框,来让玩家选择是否交易,先在UI场景中创建TradeUI,其中包括交易的物品样子、名称、交易个数、是否交易。如图3-10表示交易窗口UI图3-10交易窗口在脚本中添加TradeUI脚本,获取TradeUI上的物品组件,获取到物品的信息后判断玩家背包有多少当前物品,如果想要卖的物品数量比自己背包的多,不可进行出售;在进行物品买入时,如果要买入物品已经超过了自己背包的容量,不可买入。游戏的存储系统是一个重要的功能性需求,它用于保存和管理玩家的游戏进度和数据。游戏里需要保存的数据非常的多,需要一个强大的序列化工具,而unity现有的序列化工具无法序列化我们的字典和列表,所以这里添加NewtonsoftJson以便实现项目。Newtonsoft.Json是一个流行的.NET库,用于处理JSON(JavaScriptObjectNotation)格式的数据。它提供了一套丰富的API,使得在.NET应用程序中序列化和反序列化JSON数据变得简单而高效。NewtonsoftJson插件如图3-11所示。图3-11NewtonsoftJson首先创建游戏的数据存储游戏框架,在脚本文件夹中创建GameSaveData脚本,定义游戏要保存的数据信息。继续创建ISaveable脚本作为存储接口。继续创建SaveLoadManager脚本用来执行存储加载的方法。接着实现数据存储与加载的逻辑,在需要保存的数据脚本中,添加ISaveable接口,定义GameSaveData()保存需要保存的数据,返回给GameSaveData。这个过程返回产生若干个数据文件,创建DataSolt来接收所有要保存的数据。在SaveLoadManager中实现数据的保存和加载,存储代码如下:privatevoidSave(intindex){DataSlotdata=newDataSlot();foreach(varsaveableinsaveableList){data.dataDict.Add(saveable.GUID,saveable.GenerateSaveData());}dataSlots[index]=data;varresultPath=jsonFolder+"data"+index+".json";varjsonData=JsonConvert.SerializeObject(dataSlots[index],Formatting.Indented);if(!File.Exists(resultPath)){Directory.CreateDirectory(jsonFolder);}Debug.Log("DATA"+index+"SAVED!");File.WriteAllText(resultPath,jsonData);}创建一个DataSlot对象data。遍历saveableList列表,对每个saveable对象,调用其GenerateSaveData方法生成可保存的数据,并将这个数据与对应saveable的GUID(全局唯一标识符)一起添加到data对象的dataDict字典里。将数据槽dataSlots第index个位置上的DataSlot对象覆盖为新创建好的data对象。定义json文件的路径resultPath。文件路径包含文件夹jsonFolder和文件名,文件名由"data",索引index和文件后缀".json"组成。使用Newtonsoft.Json库的JsonConvert.SerializeObject方法将dataSlots[index]序列化为json格式的字符串jsonData,并通过Formatting.Indented参数设置该json数据分级显示(即按照缩进格式化)。如果指定路径resultPath的文件不存在,则创建jsonFolder的文件夹。打印一条日志信息到控制台,提示用户数据index已经保存。图3-12为游戏数据生成的json文件,data01为第一个游戏存档数据文件,对应图3-13的第一个存档,data02为第二个游戏存档数据文件,对应图3-13的第二个存档。图3-12游戏数据文件在文件夹的显示图3-13游戏内菜单存档UI显示的游戏存档将json格式的字符串jsonData写入文件,文件路径为resultPath。加载代码如下:privatevoidSave(intindex){DataSlotdata=newDataSlot();foreach(varsaveableinsaveableList){data.dataDict.Add(saveable.GUID,saveable.GenerateSaveData());}dataSlots[index]=data;varresultPath=jsonFolder+"data"+index+".json";varjsonData=JsonConvert.SerializeObject(dataSlots[index],Formatting.Indented);if(!File.Exists(resultPath)){Directory.CreateDirectory(jsonFolder);}Debug.Log("DATA"+index+"SAVED!");File.WriteAllText(resultPath,jsonData);}首先创建一个新的DataSlot对象,并根据saveableList列表里每个对象生成的数据填充该DataSlot。接着,该方法将此DataSlot对象存储到dataSlots列表的指定index处。然后,方法会创建一个文件路径,并将刚刚创建的DataSlot对象序列化为JSON格式的字符串。如果给定的文件路径不存在,这个方法会创建一个新的目录。最后,这个方法会将序列化后的JSON字符串数据写入到指定的文件中,并在控制台程序输出一个日志状态,表示数据已保存。在本章中,不仅完成了游戏的总体框架的设计,还对游戏中主要的部分进行了详细的设计和实现。通过设计游戏的总体架构,为游戏的功能和流程奠定了基础。在具体的设计阶段,对游戏中的各个模块进行了细致的规划和实现。在游戏的总体框架设计中,考虑了游戏的整体结构、各个模块之间的关系,以及游戏的核心逻辑和玩法。通过设计清晰的类和对象,为游戏的代码编写提供了良好的基础,使得游戏的各项功能可以有机地连接在一起。在详细的设计和实现过程中,对游戏的主要部分进行了具体的规划和实现。无论是角色的移动和操作、关卡设计和战斗系统,还是UI界面和音效的设计,都致力于提供一个完整而精彩的游戏体验。在下一章中,将对游戏进行最后的测试和优化。通过测试,将发现游戏中可能存在的问题和不足,并及时进行修复和改进。通过优化,将进一步提升游戏的性能和用户体验,确保玩家能够获得流畅、稳定和令人满意的游戏体验。鉴于游戏自主研发,涉及的功能模块繁多且逻辑错综复杂,因此开发周期相对较长。在漫长的开发过程中,难免会出现一些技术上的瑕疵,即所谓的bug。为了确保游戏的高品质以及流畅运行,必须对游戏的每一项功能进行详尽细致的测试。在测试完成后,还需根据测试结果对游戏进行必要的优化调整,以提升玩家的游戏体验。测试流程涵盖了从游戏启动、加载,到农作物系统等各个关键环节,每个部分都会受到细致的检验,以确保它们均符合预期的功能要求。游戏测试工作主要分为两大方面:一是总体功能测试,这一环节严格依照游戏最初的设计方案,对预期功能的实现情况进行逐一检查,旨在确保游戏功能与设计方案一致,达到预期的效果;二是性能测试,我们会在不同性能、配置的环境下进行测试,根据测试结果进行针对性的性能优化,以保障游戏在各种环境下的流畅运行。图4-1表示游戏测试工作流程图。通过对游戏进行不断地测试,发现问题后进行不断地修改,最后得到图4-2记录需测试功能与实际输出结果。图4-1游戏测试工作流程图图4-2测试功能与实际输出对照表格为了提高游戏的流畅度与帧率,对脚本进行优化。Awake方法主要用于在脚本首次被调用时执行初始化操作,而Start方法仅在Update方法首次被调用时执行一次。Unity中的三个核心更新函数——Update、FixedUpdate和LateUpdate——各自遵循不同的时间间隔进行更新。Update函数会在每一帧中执行,确保了游戏的实时响应;在Unity中,Update和FixedUpdate都是更新函数会循环调用,但Update函数会在每渲染一帧时被调用,FixedUpdate按固定时间间隔执行,不受帧率影响[3]。FixedUpdate则以固定的时间间隔运行,通常用于处理与物理引擎紧密相关的性能需求,其执行频率不受帧率波动的影响。游戏的流畅度与帧率息息相关,帧率的下降会导致游戏体验的下降。Update会在每一帧都会执行,所以采用减少在Update函数中实际调用的工作量的方法,来提高游戏中的流畅度与帧率[10]。图4-3给出了Unity用于计算单个帧中时间的逻辑,以及time、deltaTime、fixedDeltaTime和maximumDeltaTime属性如何相互关联。图4-3Unity官方手册的时间逻辑流程图优化游戏性能时,采用对象池技术是一个高效的方法。对象池通过缓存和重用对象,避免了频繁的对象创建与销毁操作,从而提高了游戏的性能和资源利用率。对于管理不同对象类型的情况,字典是一种常用的数据结构,它可以将对象类型和对应的对象实例进行关联。为了实现字典中每一种类型的对象有多个实例的需求,决定采用字典集合的结构方式。根据键值对的方式存储对象,这样可以快速地根据对象类型进行查找和访问。而对于每种类型的对象有多个实例的情况,使用列表作为字典的值,可以有效地存储多个对象的引用。对象池的实现并不是直接销毁对象,而是将其隐藏起来。当需要使用某个对象时,首先会在对象池中查找该对象是否处于非活跃状态,即是否有可重用的对象。如果对象已经被实例化并且处于非活跃状态,那么就可以直接从对象池中获取对象的引用,并在场景中调用它,避免了重新创建对象的开销。通过使用对象池技术,可以避免频繁的对象创建和销毁,节省了资源和时间。同时,对象池还能保持对象的状态和初始化设置,减少了重新配置对象的操作。这样不仅提高了游戏的性能,还提升了游戏的稳定性和流畅度。通过使用字典集合和列表的数据结构,可以管理不同类型的对象和多个对象实例。对象池实现对象的隐藏和重用,避免了反复的对象创建与销毁,提高了游戏的性能和资源利用效率。图4-4为对象池流程图,很好的反应了对象池的各个部分。图4-4对象池流程图(来源网络)为确保游戏的品质与稳定运行,本章致力于游戏的测试与优化工作,力求减少Bug的数量。严格依据游戏最初的设计方案,对预期功能进行了详尽的测试,并将测试结果整理成表格。该表格详细记录了各项功能的实际实现情况,为我们提供了宝贵的反馈。总体而言,游戏制作工作已告一段落,但也意识到在某些方面仍存在不足,与设计规范相比还有改进的空间。我将继续努力,不断完善游戏,为玩家带来更好的体验。本章是毕业论文的最后一章,是整篇论文的归宿,我将对本次毕业设计进行最后的工作总结,对本次的研究进行小小的展望。《麦田物语》是一款基于Unity引擎开发的像素风RPG游戏。在这个项目中,深入研究了2D游戏开发的不同方面,从游戏设计到实现,覆盖了一个完整的游戏开发周期。项目的目标是创建一个富有挑战性且引人入胜的游戏,同时掌握Unity引擎和2D游戏开发的相关技术。设计阶段,首先明确了游戏的核心玩法和目标,包括探索、角色劳作、物品收集等元素。参考了经典的RPG游戏,设定了一个丰富的背景故事和一个开放式的游戏世界。实现阶段,依托Unity强大的2D游戏开发工具,构建了游戏的各个组件。采用了Tilemap来创建游戏的地图,实现了一个灵活的角色控制系统,包括平滑的运动和多样的交互能力。农作物系统设计,要求玩家使用对应工具进行收获、收割庄稼。此外,为了提升游戏体验,还实现了一个保存/加载系统,允许玩家随时保存游戏进度。在开发过程中,遇到了不少挑战,例如如何优化游戏性能、处理复杂逻辑等。通过不断地实验和调整,逐步解决了这些问题。通过参与这个项目,不仅提升了编程能力和解决问题的能力,还学会了如何协同工作和时间管理。最终,《麦田物语》成功地结合了传统RPG元素和像素风美术设计,创造了一个既有趣又富有挑战性的游戏体验。这个项目证明了Unity引擎在开发2D游戏方面的强大能力,也展示了技术能力和创新精神。总之,《麦田物语》的设计与实现过程是一次宝贵的学习经历。它不仅让我深入理解了游戏开发的各个环节,更重要的是,它激发了我对游戏开发的热情,并为未来的职业生涯奠定了坚实的基础。期待将在这个项目中学到的知识和技能应用到未来的工作中,继续探索游戏开发的无限可能性。随着《麦田物语》项目的成功实施,未来对于这款基于Unity引擎的像素风RPG游戏的研究和开发前景广阔。展望未来,我们可以从多个角度进一步优化和扩展游戏,使其更加丰富和吸引玩家。以下是几个可能的研究
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源绿色金融政策与绿色能源产业政策创新实践研究报告
- 2025年金融行业数据资产价值评估与变现模式报告
- 2025年新能源汽车动力电池回收利用技术创新趋势分析
- 2025年中国高尔夫三层球行业市场分析及投资价值评估前景预测报告
- 2025年中国高端电磁炉灶台行业市场分析及投资价值评估前景预测报告
- 3.1 空间向量及其运算说课稿高中数学人教A版选修2-1-人教A版2007
- 2025年中国高纯金属材料行业市场分析及投资价值评估前景预测报告
- 5.2《古今中外话桥梁·家乡的桥》 说课稿 2024-2025学年辽海版《综合实践活动》七年级上册
- 1 生活中的立体图形教学设计初中数学鲁教版五四制2012六年级上册-鲁教版五四制2012
- 2025年中国复合壁板行业市场分析及投资价值评估前景预测报告
- 《创伤失血性休克中国急诊专家共识(2023)》解读 2
- 项目部领导带班记录
- 2025年中国心力衰竭诊断和治疗指南
- 乐刻培训课件
- 现代教育技术课程总结
- 银行绿色运营管理办法
- 2025年新修订《治安管理处罚法》
- 生产企业退货管理办法
- 高速公路工作人员安全教育培训
- 精神科老年人皮肤护理
- 物流园区卫生管理制度
评论
0/150
提交评论