基于Unity3D的格斗游戏的设计与实现.docx
摘要本设计是基于Unity3D所开发实现的一款RPG(Role-playing Game-角色扮演游戏)-格斗游戏,以游戏的逻辑流畅性、界面工整简洁与还原最原始最通俗的角色扮演类游戏为设计目标,具有准确输出各类板块功能、易懂、易操作、界面简洁美观的3D一体化系统设计与运行简易方便等强大功能为一体。本设计前端采用Unity3D+NGUI+3D MAX 2018+Photoshop 2018等工具来设计一个具有真实感的3D场景界面,此场景界面不仅简洁美观而且通俗易懂,极大程度地还原了最原始状态的RPG(Role-playing Game-角色扮演游戏),加强了人机交互功能,使得玩家可以轻易上手游戏的每一个部分;后端主要采用Microsoft Visual Studio 2017工具,全程应用C#语言实现了游戏内部各个环节的紧扣性与代码编译灵活性从而使得游戏操作的简易性提高;总体实现了一个具有现代化RPG(Role-playing Game)-角色扮演游戏功能的系统。游戏强大的视觉体验以及可操作性成为当代热门话题,采用各种先进的技术以提高游戏内外部各个部分的统一性为原则,充分展示了游戏逻辑的准确和重要性,从而进一步吸引广大玩家的青睐。关键词:RPG(Role-playing Game-角色扮演游戏)、C#、Unity3D、NGUI、Microsoft Visual Studio 2017AbstractImplemented by this design is based on Unity3D- a RPG (Role-playing Game) which is named The Game of Fighting. The Game logic fluency is concise, neat interface and restore the original is the most popular role-playing games as the design goal and this design has the function of accurate output of all kinds of plates, interface simple and easy to understand easy operation, beautiful 3D integration system design and powerful functions such as operation simple and convenient.This design Front End using Unity3D + 3D MAX 2018 +Photoshop 2018 and so on to design the interface of a realistic 3D scene, the scene interface not only simple and beautiful but also easy to understand, drastically reducing the most primitive state of RPG (Role-playing Game), strengthen the function of human-computer interaction, allowing players to easily every part of the Game; The Back End mainly adopts Microsoft Visual Studio 2017 tools, and the C# language is applied throughout the whole process to realize the tightness and flexibility of code compilation in all aspects of the game, so as to improve the simplicity of the game operation. The overall implementation of a modern Role-playing Game function of the system.Nowadays, the powerful visual experience and operability of the game have become a hot topic. The use of various advanced technologies to improve the unity of all parts of the game as the principle, fully demonstrate the accuracy and importance of the game logic, so as to further attract the favor of the majority of players.Key words: RPG(Role-playing Game)、C#、Unity3D、NGUI、Microsoft Visual Studio 2017 目 录第一章 绪论11.1 项目背景与开发设计目标11.2 项目开发设计意义11.3 项目开发设计方法与技术11.4 项目开发设计内容介绍21.4.1 游戏介绍21.4.2 游戏场景31.4.3 游戏角色41.4.4 游戏系统5第二章 开发技术与工具62.1 前端架构62.1.1 Unity3D62.1.2 NGUI62.2 后端技术62.2.1 Visual Studio62.3 开发环境62.3.1 软件环境62.3.2 硬件环境72.3.3 开发工具7第三章 游戏基本框架设计83.1 游戏开始场景界面设计83.1.1 游戏场景素材导入83.1.2 实现镜头拉近效果103.1.3 使用NGUI设计游戏开始场景的UI界面113.2 角色创建173.2.1 角色模型以及相关UI素材导入173.2.2 角色控制的实现213.2.3 实现镜头跟随主角移动以及镜头视觉的更改26第四章 游戏整体系统实现284.1 游戏基本功能系统实现284.1.1 交互系统284.1.2 背包系统334.1.3功能面板的设计374.1.4技能系统的设计394.1.5 主角状态信息与游戏场景小地图的显示设计434.2 怪物系统与角色格斗系统的实现464.2.1 怪物模型导入464.2.2 角色攻击与技能系统的实现564.3游戏的整体合并与导出68第五章 游戏测试725.1测试计划725.1.1 测试软件环境725.1.2 测试硬件环境725.1.3 测试内容725.2测试用例735.2.1 游戏场景“01_start”功能测试用例735.2.2 游戏场景“02_character creation”功能测试用例735.2.3 游戏场景“03_play”功能测试用例745.3测试结果77第六章 总结与展望786.1 总结786.2 展望79参 考 文 献80致 谢81第一章 绪论1.1 项目背景与开发设计目标随着时代的发展,游戏的设计与开发成为了当今必不可少的话题。Unity3D3是当今炙手可热的游戏开发工具之一,随着当代游戏开发的不断进步,给游戏玩家带来了非常棒的游戏体验感,也为大众游戏设计爱好者提供了各种设计游戏所需的平台与工具,从而极大程度地减少了游戏设计者开发游戏的时间成本与经济成本,提高了效率。本项目主要利用Unity3D系统来实现一个现代化RPG游戏类型的项目,进一步加深游戏玩家对最原始的RPG游戏的理解,同时也分享一些开发设计经验从而得以解决一些游戏设计爱好者在游戏开发中遇到的同类BUG或其他代码块上的问题。1.2 项目开发设计意义Unity3D为广大游戏开发设计爱好者提供了一个能将自己对游戏开发的想法得以展现和发挥的平台。本项目的开发设计主要从最原始的RPG游戏设计理念1出发,同时或多或少帮助了广大游戏爱好者对最原始的RPG类型游戏的理解,实现最通俗易懂的RPG类型游戏的设计理念,让广大游戏开发设计爱好者更加热爱从事于游戏的开发设计,从而推动游戏开发的进一步发展。Unity3D游戏引擎简单清晰、兼容性强,当然也是可跨平台使用、简单易学、至关的开发语言(C#等易上手编程语言),即本项目的开发设计意在吸引广大的游戏开发设计爱好者进一步对Unity3D的理解,随着当今游戏开发平台市场人才的需求量不断增大,因此,Unity3D游戏开发设计无疑是当今最值得着笔篇章的话题。1.3 项目开发设计方法与技术对于角色扮演类游戏(Role-playing Game)的理解,简单地说,它是大众所青睐的虚拟游戏世界,表达着真实的场景与剧情的人性化,在游戏里提供虚拟的游戏角色操控,极大程度地使得玩家在游戏世界里体验着“第二人生”。RPG框架的研究与设计自RPG问世以来不断地进步,发展至今成为了广大游戏设计爱好者云集的平台。RPG游戏的设计比较复杂多样,其系统多为格斗、剧情、任务、情景对话、人机交互、装备、任务等系统为主,其中格斗系统为RPG游戏设计的核心系统。1格斗系统主要包括:1. 属性系统:属性系统是RPG游戏中最通俗的系统,它包含有主角、装备、药品、NPC、技能、状态、怪物等各自的属性值,通过各类属性值运算可得出在格斗中各种逻辑交互的数值。2. 状态系统:状态系统是指在游戏运行时,角色、NPC、怪物等操控移动或系统自动移动的物体状态的属性值,即被控制角色是否处于运动状态(即当玩家点击鼠标或操控键盘移动从而被监听器检测到数值的变化);NPC是否处于静止状态;怪物是否处于攻击状态等。当然这些状态是可以同时存在的,因此这些状态需要在系统运行程序中利用不同的数值来表达和区分。所以格斗的规则越多,状态系统的逻辑就越复杂。因此在游戏开发之前要做一系列的可行性方案,不然在后续的开发设计与维护中显得格外吃力困难。3. 行为系统:行为系统即表达游戏物体与控件在运行时所实现出的特性,例如声音行为、特效行为以及动作行为等都受行为系统所管理。4. 人工智能(AI)系统:人工智慧系统主要支持于人机交互,即在格斗过程中,角色与怪物产生碰撞所发生的数据或属性的改变,从而产生各种效果,即当怪物或角色其中一方属性值越高或者功能越齐全,则相应的人工智能设计过程也就越加复杂,需要通过不一样的算法加以结合输出来得出一系列的人工智能指令。1.4 项目开发设计内容介绍1.4.1 游戏介绍本项目开发设计的内容主要分为两大板块,即游戏基本框架设计和游戏整体系统实现,通过Unity3D来实现一款以冒险岛为背景的基于电脑端的单机RPG游戏,主要设计包括:3D场景布局、人物素材的导入引用、角色创建与功能输出、游戏内外部各个功能模块的应用、各场景元素的添加、角色任务商店系统的设计、整体代码块的衔接以及对最终实现的游戏进行打包调试等为此游戏项目的开发设计内容。游戏类型:RPG游戏平台:Windows游戏风格:乡村野外田园游戏玩法:玩家通过点击NPC接受任务、购买装备、购买药品然后进入野外怪物格斗区域进行格斗消灭怪物,通过消灭怪物得到经验和消灭相应数量的怪物可获得相应的金币奖励。1.4.2 游戏场景作为游戏的主要交互区域,游戏场景承载了玩家在游戏中的大部分交互,即游戏场景的重要性不言而喻。本设计游戏场景可分为2D和3D模式,2D场景由UI界面通过一个个图像、Sprite、Label、button以及各个UI界面控件拼凑而成,虽然比起3D的效果略显逊色,但2D界面在游戏里的精确表达也至关重要。本设计主要通过对乡村野外田园的风格进行设计,其主要元素有树木、河流、山川、山丘、天空、房屋、桥梁、地砖等3D素材进行拼凑而成,风格怡人,线条感舒适,装饰丰富,使玩家在视觉上得以放松,游戏内部分场景如下图所示:图1-1 游戏2D界面图图1-2 游戏3D界面图1.4.3 游戏角色6一款游戏是否吸引人,其角色的模型起到了至关重要的作用,在本设计中,角色模型的设计主要采用3D MAX技术构造而成,角色的类型为卡通类型,因此会受到广大游戏玩家的喜爱。图1-3 游戏角色-魔法师图1-4 游戏角色-剑士1.4.4 游戏系统本设计中的游戏功能系统主要分为以下几类:u 游戏载入u 创建游戏u 任务系统u 商店系统u 背包系统u 状态系统u 技能系统u 装备系统u NPC、怪物系统以上几类系统为本设计基本的游戏功能,这些功能在RPG类型的游戏中都是最常见的,通过这些功能系统即可展现一款RPG游戏的核心操作与运行,其中最为核心的是技能系统,一款RPG游戏的受欢迎程度大多取决于技能的实用性与技能动画华丽性。第二章 开发技术与工具 2.1 前端架构本项目主要采用Unity3D+NGUI技术。2.1.1 Unity3DUnity3D在本设计中起到一个整体全面的框架构建作用,它使得游戏设计的操作更加简单化,使得三维效果的构建以及全局场景的布置更加系统专业。同时,它也可以发布移动端和客户端等多种类型的游戏,这极大程度地方便了游戏设计者。2.1.2 NGUINGUI是严格遵循KISS原则并用C#语言所编写的Unity3D插件1,提供强大的UI系统和事件通知框架。2.2 后端技术本项目后端技术处理主要运用Microsoft Visual Studio 2017开发工具。2.2.1 Visual Studio本设计主要应用Visual Studio来编写代码,所应用的语言为C#,其功能完善,界面简洁,适用性极高,为从事Unity3D工作者提供了一个极佳的编程环境,其目前也是Windows平台当中功能最完善、最流行的应用程序的集成开发环境。2.3 开发环境2.3.1 软件环境表2-1 软件信息表序号名称版本备注1Windows 10 企业版 64位10.0,版本17134操作系统2.3.2 硬件环境表2-2 硬件信息表序号名称配置备注1MSI-QE62 6QD-1077XCN8G内存+1TB机械硬盘2CPUIntel Core i7-6700HQ CPU-2.60GHz3显卡NVDIA GTX960M2.3.3 开发工具表2-3 开发工具信息表1序号名称版本备注1Unity 3D2019.2.0f1游戏开发工具2Unity Hub2.2.2Unity启动器3Microsoft Visual Studio2017编译器4NGUI2018.3.0Unity插件-UI界面处理工具5Adobe Photoshop CC2018图像处理工具82第三章 游戏基本框架设计3.1 游戏开始场景界面设计3.1.1 游戏场景素材导入图3-1 游戏场景素材导入图首先在Unity3D开发环境下进行游戏场景的搭建,即导入模型(山丘、树木、房屋、天空和水面等的模型添加)。导入后的场景在文件夹AssetsRPGPrefabMap中,效果如下图所示:然后在Hierarchy栏上点击Main Camera,将Main Camera移动到场景当中后在左上角菜单栏中点击GameObjectAlign With View即使得Camera与当前视觉保持一致,效果如下图所示:图3-2 游戏场景效果图在游戏中,默认鼠标样式的图形也需要进行修改。即通过FileBuild SettingPlayerSetting,更改游戏场景默认鼠标,具体操作如下图所示:图3-3 默认鼠标设置操作图为了进一步加强场景画面的真实性,还需额外给场景添加天空和水面的效果,在AssetsStandard AssetsWater(Basic)中,将“Daylight Simple Water”拖到场景当中,然后调节适当的高度和大小使得水面效果在场景中显示。与水面效果类似,下一步导入天空盒子(Skyboxes)然后根据自己的审美选择喜欢的天空样式(SkyboxesTextures中的Materials)添加进Main Camera内部即可,具体操作如下图所示:图3-4 游戏场景素材添加操作图3.1.2 实现镜头拉近效果首先将Main Camera拉到离主场景界面比较远的地方(形成远近冲击效果),记住此时Camera的位置坐标(Transform中X,Y,Z值),因为要控制Camera的移动,所以给Main Camera添加一个脚本来控制它的移动,具体代码如下:图3-5 控制镜头拉近效果代码图以上代码首先定义镜头移动时的速度(20)以及镜头最终停止的位置(Z轴-25),我一开始设置的镜头初始位置为Z轴方向上的-60。图3-6 镜头初始位置图通过Update()方法由系统自动调用且判断Main Camera的位置是否小于停止运动时的位置,若Main Camera的最终位置小于-25则由Vector3向量表示方法1输出Camera的最终位置且保持在视野当中不变,因此实现游戏镜头拉近的效果。3.1.3 使用NGUI设计游戏开始场景的UI界面在镜头拉近效果实现结束后,还需要实现相应的用户交互功能,在此我主要通过使用NGUI控件来设计游戏开始场景的UI界面。(在此我强调一下NGUI插件的使用,NGUI作为一款Unity3D里兼容性比较差的UI界面设计插件,它的导入成功或失败跟Unity3D的版本相关性极大,一般Unity3D在2018以上的版本都要求最新版本的NGUI。)图3-7 NGUI控件图当NGUI成功导入Unity3D后,通过新建一个Prefab Toolbar来开始实现UI界面的设计,即NGUIOpenPrefab Toolbar,然后可以把Prefab Toolbar放在功能栏下以方便使用,如下图所示:然后通过NGUIOpenAtlas Maker将UI界面设计的素材添加进去,具体操作如下图所示:图3-8 Atlas Maker添加元素图接着在场景中通过新建Sprite添加设计好的游戏LOGO以及简单的UI控件(将“New Game”和“Load Game”按键合并在buttonContainer下),效果如下图所示:图3-9 开始场景UI设计图在实际操作中,“New Game”和“Load Game”按键是默认隐藏的,需要通过玩家点击监听后显示出来,即在开始时显示游戏LOGO以及“PRESS ANY KEY TO START”标签,当玩家点击任何地方或按下任意键时显示“New Game”和“Load Game”按键。因此在“PRESS ANY KEY TO START”标签下新建一个脚本以实现相应的功能。即当在开始界面运行时,按下任意按键(或鼠标点击)时,显示“New Game”和“Load Game”按键,结果如下图所示:图3-10 标签实现代码图图3-11 游戏开始场景界面图接下来再进一步处理“New Game”和“Load Game”按键的操作,首先给为buttonContainer添加一个脚本以控制两个按键的功能实现,具体代码如下:图3-12 UI控件代码图之后在“New Game”和“Load Game”按键的On Click控件下指定buttonContainer里的方法,然后设置相应的点击事件即可:图3-13 实现按键方法指定操作图以上设置完成后,游戏开始界面已经基本实现,下一步是位游戏场景添加背景音乐以及相应的按键点击声音,即在Main Camera下添加相应的背景音乐(即Add Component添加Audio Source),然后将背景音乐拖入即可,再在各个按键中添加相应的UIPlay Sound(内置脚本,在相应的控件下Add Component添加即可),然后将相应的按键音拖入即可,具体操作如下图所示:图3-14 背景音乐添加操作图图3-15 按键音添加操作图3.2 角色创建3.2.1 角色模型以及相关UI素材导入首先创建角色初始登陆所在场景的UI界面。角色创建的背景采用与游戏初始加载的Main Camera下的2D界面一致,且Main Camera设置为不移动静止状态。创建游戏的UI界面中,其角色名字输入框用NGUI-Prefab Toolbar里的Simple Input Field控件实现,效果如下图所示:图3-16角色登陆场景界面图将角色资源包导入,角色模型分为两种,即魔法师与剑士。里面包含有两个角色相应的动画资源,将角色拖进游戏场景里进行位置的设定以及相应皮肤资源的渲染指定,然后在两个角色相应的动画资源里找到对应动作的动画进行指定,之后存入Prefabs包里以便后续使用,进行添加完毕后,相应的效果图如下:图3-17 魔法师-角色创建图图3-18 剑士-角色创建图接下来将实现角色更换的功能,在角色创建UI界面中,我已设置好Preview与Next的按键,即点击此两种按键可进行游戏角色模型的切换,因此创建一个空的GameObject(将它命名为characterCreation)控件将此功能实现,然后将两个角色的站立动画(Idle动画)以及角色名字输入框控件进行指定即可,其中角色切换的核心代码如下图所示:图3-19 角色切换代码图(1)图3-20 角色切换代码图(2)即当切换角色模型的时候,需要设置只显示其中一个角色,即当选择魔法师角色时,剑士角色设置为隐藏,即在以上脚本里添加一个UpdateCharacterShow()方法然后在其中添加了一个函数来实现未选择的角色模型设置隐藏,同时运用SetActive()方法来实现被选择角色的显示,之后在各方法里更新角色模型的显示时直接调用UpdateCharacterShow()方法即可,最后在角色选择界面中的两个角色选择按键(Next按键与Preview按键)中指定characterCreation方法里的点击事件方法(在On Click事件中将方法Method改为characterCreation中的OnNextButtonClick()与OnPrevButtonClick())即可,具体操作如下图所示:图3-21 角色切换操作图3.2.2 角色控制的实现首先设置游戏运行时,鼠标的点击事件,即当游戏检测到鼠标的点击指令时输出相应的行为转换,在游戏内部设置检测鼠标的点击事件然后将该指令的表达形式转变为射线即表达Unity3D中Camera的点换射线方法ScreenPointToRay()方法,接着在相应的点击物件中添加碰撞器以检测碰撞的发生与否(在此可以通过设置标签(Tag)的方法来检查符合要求的碰撞信息,后续即可方便地直接调用Tag里面的信息),即在游戏场景界面Map里的Terrain类物体都视为可被检测到的点击物体,当点击事件实现后可为点击添加点击效果,即在脚本中实例化点击效果然后直接将点击效果导入即可,此部分核心代码如下图所示:图3-22 实现点击事件代码图当点击事件实现以后,接着添加(PlayerDir)脚本来处理角色随点击方向的方向朝向改变,即在获得点击目标后,需要改变角色站立的方向,其代码如下:图3-23 角色朝向代码图(1)图3-24 角色朝向代码图(2)角色朝向的功能实现以后,将处理角色移动的功能。首先为角色添加一个Character Controller(控制器)来对角色进行操控,图3-25 角色控制器添加然后给角色添加相应的移动脚本(PlayerMove)来对其进行移动操控,代码如下:图3-26 角色移动代码图因为刚开始的时候,targerPosition的初始坐标为(0,0,0)因为当检测到点击事件后会自动移动,则需要在角色朝向的Start()方法里(PlayerDir)初始化targetPosition为移动后角色的位置,则需添加的代码为:targetPosition = transform.position;即可,移动效果如下图所示:图3-27 角色移动效果图角色移动时也有相应的动画,即动画效果的导入如下:图3-28 角色动画效果导入角色动画导入后,需要在(PlayerMove)脚本中实现角色状态的控制,即角色的站立、移动动画的播放,即在角色物体下新建一个(PlayerAnimation)脚本控制角色状态的播放,然后在(PlayerMove)脚本中进行指定各种状态的信息进行初始化,之后根据状态的变化在(PlayerAnimation)脚本实现角色移动的控制即可,其代码如下图所示:图3-29 实现角色动画播放3.2.3 实现镜头跟随主角移动以及镜头视觉的更改在Camera下添加实现跟随主角移动的脚本(FollowPlayer),即在Start()与Update()方法中同时实现并且更新主角移动的坐标位置,从而更新当前主角的位置实现与主角同时移动的效果,代码如下:图3-30 镜头跟随主角移动代码图在3D游戏中,视觉的体验被广大玩家所追求,因此在本设计中添加了相应的鼠标滑轮控制视觉的功能,即通过鼠标滑轮对视觉的拉近与放大效果,通过鼠标右键对三维视觉的改变功能,在Unity3D中,此功能通过EditProject Settting中有一个鼠标滑轮的控制(Mouse ScrollWheel),即在Camera中的FollowPlayer脚本中添加ScrollView()方法来控制滑轮的拉近与放大效果的操作,同时添加一个RotateView()函数来控制鼠标右键对三维视觉的改变,旋转角度的临界值为Camera中的Rotation对应的x数值,在if(isRotation)中作修改,其中通过Quaternion(四元数)方法来对角色原始的角度进行保存,代码如下图所示:图3-31 鼠标滑轮控制视野代码图图3-32 鼠标右键控制视野代码图以上信息则为本章所重点解释的对角色控制功能的实现,下一章则对RPG类型游戏中最基本的各类游戏系统(任务系统、NPC系统、商店系统、角色状态系统、技能系统、怪物系统等)进行设计与讲解。第四章 游戏整体系统实现4.1 游戏基本功能系统实现4.1.1 交互系统RPG游戏的关键之一就是交互系统的设置从而使玩家实现与计算机的交互,在本设计中,我主要设计了三个交互系统,即任务系统、药品商店系统与武器装备系统的设计,对应的NPC在场景的位置如下图所示:图4-1 场景NPC位置图三种NPC的设计大致相同,其中武器商店系统与药品商店系统的功能一致,都为购买相应的物品,任务系统的功能为通过面板显示交互信息然后指引玩家进行后续的操作,三种NPC对应的交互面板如下图所示:图4-2 任务、药品商店、武器商店系统任务系统中,首先在任务面板上添加一个“Label”以实现相应交互信息,即“Quest”面板里面显示的文字信息,然后设置相应的“Button”按键,以检测玩家点击对应按钮的信息;药品商店与武器商店则设计相同,都为点击对应的NPC显示相应的商品信息,通过导入相应的药品素材与装备素材,其中武器商店的商品信息较多,则需添加一个“Drag Scroll View”控件去实现相应的功能,当然只添加“Drag Scroll View”功能则只是在面板上对物品上下进行拖拽,因此会显得不方便,在此也添加了相应滚动条控件,即在NGUIPrefab Toolbar中的滚动条控件添加进武器商店面板即可,其操作如下图所示:图4-3 滚动条设计图对于物品信息的信息显示,我主要通过读取文本信息的方法来实现,即添加一个“.txt”脚本进行对各种物品信息的储存,在后续的技能系统也是通过此方法得以实现,即各类商品在文本文件(ObjectsInfoList)里的格式如下:1001,小瓶血药,icon-potion1,Drug,50,0,50,601002,大瓶血药,icon-potion2,Drug,100,0,70,1001003,蓝药,icon-potion3,Drug,0,100,60,802001,黄金甲,armor0-icon,Equip,0,50,0,Armor,Swordman,150,2002002,铜甲,armor1-icon,Equip,0,39,0,Armor,Swordman,100,1502003,神迹魔法衣,armor2-icon,Equip,0,50,0,Armor,Magician,150,2002004,破旧魔法衣,armor3-icon,Equip,0,20,0,Armor,Magician,60,1002005,铜鞋,icon-boot0,Equip,0,0,50,Shoe,Common,60,1002006,神级红鞋,icon-boot0-01,Equip,0,0,70,Shoe,Common,120,1502007,帽子,icon-helm,Equip,0,50,0,Headgear,Swordman,100,1202008,神帽,icon-helm-01,Equip,0,70,0,Headgear,Swordman,120,2002009,神级魔法帽,icon-helm-02,Equip,0,70,0,Headgear,Magician,120,2002010,普通魔法帽,icon-helm-03,Equip,0,50,0,Headgear,Magician,100,1202011,黄金戒指,icon-ring,Equip,0,50,0,Accessory,Common,50,702012,铜绿戒指,icon-ring-01,Equip,0,30,0,Accessory,Common,30,502013,盾牌,icon-shield,Equip,0,50,0,LeftHand,Common,50,702014,神盾,icon-shield1,Equip,0,70,0,LeftHand,Common,70,1002015,皇族项链,icon-tailman,Equip,0,30,0,Accessory,Common,30,602016,火柴棍,rod-icon,Equip,40,0,0,RightHand,Magician,40,802017,金属棍,rod-icon02,Equip,60,0,0,RightHand,Magician,60,1202018,神级魔法棒,rod-icon03,Equip,80,0,0,RightHand,Magician,80,2002019,木剑,sword0-icon,Equip,40,0,0,RightHand,Swordman,40,602020,双剑,sword0-icon00,Equip,60,0,0,RightHand,Swordman,60,1002021,黄金剑,sword1-icon,Equip,80,0,0,RightHand,Swordman,80,1502022,神级圣剑,sword2-icon,Equip,100,0,0,RightHand,Swordman,150,200即在每两个数据之间通过逗号隔开,然后读取文本中的信息,通过一一遍历来输出对应的物品信息,从而达到各类商品的信息显示,之后需要通过访问文本文件里的装备信息,即在武器商店面板脚本(ShopWeaponUI)中定义一个数组,即用来所有的装备id(20012012),然后添加grid来管理装备在武器商店面板中的排序,其代码以及操作如下图所示:图4-4 装备信息读取设置图图4-5 装备Prefab设计图图4-6 装备信息数组定义图4-7 武器面板信息读取代码图4.1.2 背包系统在交互系统得以实现之后,需要对背包(Inventory)系统进行相应的设计与实现,即通过玩家跟药品商店系统NPC与武器商店系统NPC进行交互,购买相应的商品,然后在背包系统中获取相应的物品信息,从而结束交互。首先对背包进行设计,背包容量为4*5空间的布局,即最大可装满(储存)20的物品信息,同时设计相应的金币模块,其设计如下:图4-8 背包系统面板同时在背包系统的“GameObject”里添加相应的脚本进行指定每个小空间的物品以及功能显示的方法,当每个物品小空间与金币信息实现成功后,接下来要对每一个小空间进行操作,即对物品的添加以及使用等情况,首先对单击第一个网格添加一个“Sprite Child”作为后续物品信息显示的Prefab,然后导入相应的药品与装备的素材进行设置,同时也要在每个小空间的右下角设置对应商品数量的数字显示,通过添加“Label”控件进行设置,然后当鼠标移动到物品信息处时要输出相应信息情况的显示,即读取(ObjectsInfoList)里的信息,具体操作如下:图4-9 背包系统功能在小空间里要实现存储物品的外观信息、数量信息以及物品类型信息,即在背包系统里添加一个脚本(InventoryItemGrid)进行对各类物品的管理,其中“item.SetIconName(id,info.icon_name);”是在背包信息管理代码(InvenrotyItem)下的一个函数,实现设置物品名称的作用,其代码如下:图4-10 背包系统管理代码图以上操作完成后,即背包功能的效果以及相应的商店购买功能代码如下图所示:图4-11 背包系统功能图4-12 商店购买功能代码图图4-13 商店购买功能处理完背包系统的小空间布局以及信息显示功能后,要对物品进行添加拖拽功能,即使得物品在4*5的20个小空间里随意摆放位置,在此NGUI提供了“UIDragDropItem”方法,即在背包系统脚步(InventoryItem)下继承该方法即可,其中,因为“UIDragDropItem”里已经定义了相应的Awake()与Update()等方法,所以要为(InventoryItem)脚本里的诸如此类方法加以保护,以及内部方法的首选调用操作,所以在Awake()与Update()里加上前缀“protected override”,然后添加“base.Awake()”方法用来首选