基于Unity3D的宠物医院模拟游戏的设计与实现.docx
-
资源ID:96763081
资源大小:11.48MB
全文页数:39页
- 资源格式: DOCX
下载积分:40金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于Unity3D的宠物医院模拟游戏的设计与实现.docx
摘要随着生活水平的不断提高与科技的发展,人们开始不满足于物质上的需求,饲养猫狗人数大幅度增长。可在饲养过程中难免会遇到各种各样的问题。当今社会,玩游戏又成了人们的主要娱乐与消遣方式。模拟类科普游戏可以让人们在消磨时间的同时学习到知识,虽然不能完全代替传统的正规教育,但仍然可以起到教育的作用。Unity3D作为一款既能开发2D又能3D游戏、且可部署到多个主流平台内的软件,是一款被较多开发者使用的游戏开发引擎。而市面上暂时还没有发现有关科普宠物疾病类的游戏,本论文研究宠物医院模拟游戏开发,不是单纯为了娱乐,更重要的是为了能够给更多的人通过玩游戏了解到宠物疾病相关知识。本文主要描述了利用Ngui插件对游戏的流程设计与功能实现,为后续开发同类游戏的开发者提供思路参考。关键词:Unity3D 宠物医院 模拟游戏AbstractWith the continuous improvement of living standards and the development of technology, people are not satisfied with the material needs, and the number of cats and dogs has increased significantly. It is inevitable that various problems will be encountered during the feeding process.In today's society, playing games has become the main way of entertainment and recreation. Simulation science games allow people to learn knowledge while killing time. Although they cannot completely replace traditional formal education, they can still play an educational role.Unity3d, as a software that can develop 2D and 3D games and can be deployed in multiple mainstream platforms, is a game development engine used by more developers. However, there is no game about pet disease in science on the market. The research on the simulation of pet hospitals in this paper is not just for entertainment, but more importantly to give more people the knowledge of pet diseases by playing games. This article mainly describes the process design and function implementation of the game, and provides ideas for developers who develop similar games in the future.Keyword:Unity3D Pet Hospital Simulation game 目录 第1章 绪论11.1 选题的目的和意义11.2 国内外研究现状11.3 论文结构概述1第2章 开发工具介绍22.1 Unity3D介绍22.2 ProBuilder插件介绍22.3 ProGrids插件介绍22.4 Ngui插件介绍2第3章 游戏需求分析33.1 科普类游戏的需求分析33.2 游戏功能需求分析33.3 游戏玩法设计33.4 本章小结4第4章 游戏设计与实现54.1 场景设计54.1.1 安装ProBuilder插件与ProGrids插件54.1.2 配置人物动画54.1.3 人物移动实现64.1.4 设置相机跟随人物移动84.1.5 场景搭建84.2 学习功能实现94.2.1 学习功能的ui设计94.2.2 学习功能的事件触发实现104.2.3 学习内容选择与翻页的功能实现114.3 职位功能设计134.4 答题测试功能实现144.4.1 测试界面ui界面设计144.4.2 测试功能触发条件实现144.4.3 测试功能设计174.5 查看病例功能实现174.5.1 病例ui设计184.5.2 触发病例条件设计184.6 游戏内分数系统实现18第5章 游戏开始界面设计255.1 游戏开始界面设计255.2 开始界面按钮代码实现255.3 游戏整合与导出26第6章 游戏测试28第7章 总结33参 考 文 献34致谢35广东东软学院本科毕业设计(论文)第1章 绪论1.1 选题的目的和意义宠物,就像我们的亲人、伙伴一样,有一只宠物陪伴在身边,可以缓解人们的孤独感、寂寞感。随着人们物质生活水品的不断提高,越来越多的人开始饲养起了宠物。然而,宠物跟人类一样,也有各种各样的疾病发生,但治疗方案却跟人类完全不同,而许多宠物饲养人员并不能很清楚地了解宠物疾病给宠物带来地危害,也不了解如何预防疾病,让许多宠物就此丧失生命,同时也给饲主带来精神上的痛苦。当今社会,玩游戏成了人们的主要娱乐与消遣方式。而如今,游戏已经不再属于玩物丧志的范畴,模拟类科普游戏可以让人们在消磨时间的同时学习到知识,虽然不能完全代替传统的正规教育,但仍然可以起到教育的作用,可谓放松与学习两不误。 本选题的研究目的是为了让人们能够在游戏中更容易更方便地了解到宠物疾病知识,以测试的形式来巩固人们对宠物健康知识的记忆,从而更好的照顾自家的宠物,让自家宠物远离病痛。1.2 国内外研究现状目前国内在科普宠物疾病方面有哔哩哔哩出品的首档医疗观察类真人秀宠物医院,此节目有科普一些常见的疾病预防等。在游戏方面是娱乐休闲游戏,不具备知识传播功能,还有一些是针对人类疾病而设定的,而在国外的模拟人生系列的游戏中,虽有宠物医院的设定,但只能让玩家去简单的经营,而不能让玩家学习到有关宠物疾病的相关知识。因此研究一款宠物医院模拟科普类游戏是很有必要的。1.3 论文结构概述本文主要分为六个部分:第一部分:绪论,主要阐述毕业设计选题的目的与研究意义、国内外研究现状以及本文的结构介绍;第二部分:介绍了开发游戏所用到的工具与插件介绍;第三部分:详细描述了游戏内的需求与设计;第四部分:详细描述了游戏内各个功能的制作与实现;第五部分:游戏的UI界面设计、描述游戏的整合与导出并进行测试;第六部分:总结游戏内的不足与今后的改进。35第2章 开发工具介绍2.1 Unity3D介绍Unity3D是一款由Unity Technologies所研发的跨平台2D/3D游戏引擎,开发的游戏可以部署到多个主流平台,如常见的:Windows、MacOS、Android与iOS。除游戏开发外还可以实现视频制作,其对模型资源的兼容性高,多个主流建模软件生成的模型均可以在Unity3D中完美导入,并可以在原模型修改后自动更新。Unity3D给用户提供了可视化操作界面,利用内置插件,可以让新手短时间内熟悉并开发出游戏原型。Unity3D主要支持三种语言:C#、UnityScript(多被称为“Javascript”)和BOO。Unity2017.2测试版后的版本在新建中已经不再包含Javascript选项,但仍然支持使用,需在Unity编辑器外创建再导入。2.2 ProBuilder插件介绍ProBuilder插件是一款Unity2018.1版本以上自带的官方建模插件,Unity2017.x版本可以直接在Asset Store下载使用。此插件是3D建模和关卡设计工具的独特组合,为构建简单的几何体进行了操作优化处理,但也可以进行详细的编辑和UV展开。使用ProBuilder可以快速构建结构复杂的地形、车轮和武器的原型,或制作自定义碰撞几何体。主要特点有:动态用户界面、挤出插入功能、建立多边形功能、多种规则形状和着色等。2.3 ProGrids插件介绍ProGrids插件可以为我们提供视觉和功能上的网格,它们可以使所有操作都在三个轴上对齐。Probuilder结合ProGrids使用可以提高建模速度,使构建的几何体构造更为精准。2.4 Ngui插件介绍Ngui是一个功能强大的UI系统和Unity的事件通知框架,均使用C#编写,并严格遵循KISS原则。它具有简洁的代码和极简的方法。许多behaviour类都保持在两百行代码以下。该插件全面支持ios、Android、Blackberry、win8、wp8、flash。使用Ngui就像使用Unity,将现成的控件(例如按钮,复选框,滚动条和其他控件)拖放到场景视图中,或者使用类似于Lego的方法制作自己的控件。将控件另存为预设体,即可在任何地方重复使用。第3章 游戏需求分析3.1 科普类游戏的需求分析随着科学教育类电子游戏的发展以及教育理念的日新月异,科学教育类电子游戏已经被视为科学教育的一个非主流的形式8。在如今电子游戏行业迅速的发展的时代下,科普类游戏较于一般游戏来讲,其主要以普及科学知识为主,娱乐为次,在家长眼里不会被认为是玩物丧志的游戏,得到了广大家长们的认可,游戏不局限于青少年,不同年龄层次的用户均能体验游戏。 3.2 游戏功能需求分析目前饲养宠物陪伴自己生活的人越来越多,功课有时候做的不够到位,宠物发生状况时不正当的处理方式导致问题更为严重。游戏内最主要的是给人们普及疾病相关知识与处理知识。因此宠物医院模拟游戏较为重要的功能有以下几个:第一,游戏内玩家将模拟刚毕业到宠物医院工作的见习助理,根据自己的能力不断成长,提升自己的职位。第二,学习功能。玩家主要通过学习功能来获取宠物疾病的理论知识,也仅限于理论知识,模拟现实生活中医生需要在空闲时间额外看书学习的行为。第三,测试功能。这个功能是模拟医院内的考核制度。主要考察书本内的理论知识。为了能够重复玩家的记忆,答卷采用随机出题的形式展示,通过随机来出现重复的题目,巩固玩家在游戏内学到的知识。第四,查看实际病例功能。病例功能主要是让玩家学习到除了书本理论知识外的知识内容。主要记录宠物真实病情案例,病情诊断条件与治疗方案。3.3 游戏玩法设计从功能模块方面可以决定游戏的玩法,玩家通过控制人物移动触碰场景内的物体,根据提示解锁不同的功能,解锁测试功能后,则根据测试的分数判断是否具备解锁查看实际病例的功能。判断游戏结束的标准有两个,一个是低于初始分,判定为失败;一个是高于设定的值(可修改),判定为游戏通关。具体的方法实现设计如下:一,人物移动以及移动动画实现功能:利用Unity自带方法来监听玩家对键盘的操作,从而控制人物移动;利用Animator控制器,根据游戏内判断人物是否移动,从而改变动作的布尔值来改变人物不同的动画播放。二,学习功能:学习功能主要利用Ngui插件来完成界面,通过使用插件内自带的TweenAlpha脚本实现UI界面的动态效果,利用PlayForward方法控制UI显示,利用PlayReverse方法控制UI的隐藏。三,测试功能:首先利用SetActive控制测试功能解锁的开关是否在场景内显示,利用activeInHierarchy判断开关是否存在于场景内,若存在则开启测试功能;测试题目则用Random.Range随机方法,在自定义的范围内随机生成一个整数,不同的数字将对应产生不同的题目。四,职位功能:此功能是定义游戏进度的一个标准,在后台定义玩家初始分数统一为0,之后通过测试功能改变自己的分数值,获得不同的职位,之后解锁新的功能。低于初始分数则判断为游戏失败,结束游戏。3.4 本章小结从宠物模拟医院的功能需求上进行分析,决定了游戏的四大功能模块。在分析中确定了游戏的主要玩法以及实现功能模块用到的方法。结合三部分内容得到了本文所研究的游戏的总体方案设计。第4章 游戏设计与实现4.1 场景设计游戏主要由两个场景组成,一是游戏开始界面,二是游戏主场景,玩家主要在主场景内体验游戏。场景主要利用Ngui插件、ProBuilder插件和ProGrids插件来完成制作。4.1.1 安装ProBuilder插件与ProGrids插件打开Unity,点击Window->Package Manager,找到Probuilder与ProGrids,点击Install下载即可,如图3-1所示。图3-1 Probuilder与ProGrids插件安装4.1.2 配置人物动画将人物模型chan拖入场景中,创建一个新的animator命名为player controller并双击打开动画窗口,将动画wait与walk拖入Base Layer窗口并连接至图3-2所示。图3-2 动画配置为了避免人物动作需要播放完后才能切换新的动作,需要点击图3-2白色箭头,然后在Inspector窗口找到Has Exit Time,将勾选取消即可。如图3-3所示。图3-3为后续控制人物移动与站立两种状态下的动画切换,需在Parameters里添加两个bool类型的变量,分别命名为wait和walk。4.1.3 人物移动实现给人物模型分别添加Animator、Rigidbody与Capsule Collider组件。为防止人物长时间不动后会倒在地上,需锁定人物模型在x轴与z轴的旋转,在Rigidbody里找到Freeze Rotation,将x轴与z轴勾选上即可锁定。接着在模型下面添加一个新的脚本命名为player。因为人物移动需要每一帧都检测,因此将函数写入void Update里。将人物移动速度设置为public,方便直接在unity界面中调整合适速度。1. using System.Collections; 2. using System.Collections.Generic; 3. using UnityEngine; 4. 5. public class player : MonoBehaviour 6. 7. public float speed = 1f; 8. 9. public Animator anime; 10. 11. public bool wait; 12. public bool walk; 13. 14. void Start() 15. 16. /获取人物动画控件 17. anime = GetComponent<Animator>(); 18. /人物初始为等待状态 19. wait = true; 20. walk = false; 21. 22. void Update() 23. 24. 25. float horizontal = Input.GetAxis("Horizontal"); 26. float vertical = Input.GetAxis("Vertical"); 27. Vector3 direction = new Vector3(horizontal, 0, vertical); 28. 29. if(direction != Vector3.zero) 30. 31. change(); 32. walk = true; 33. /角色旋转至指定方向 34. transform.rotation = Quaternion.LookRotation(direction); 35. /角色移动 36. transform.Translate(Vector3.forward * speed * Time.deltaTime); 37. 38. else 39. 40. change(); 41. wait=true 42. 43. anime.SetBool("walk", walk); 44. anime.SetBool("wait", wait); 45. 46. 47. /避免出现特殊情况,全部设置为false 48. void change() 49. 50. wait = false; 51. walk = false; 52. 53. 经过调试,当人物移动速度为2.5f时较为合适。4.1.4 设置相机跟随人物移动相机跟随人物移动是游戏内必不可少的一部分,虽然直接将相机拖入到人物中也可以实现相机跟随,但会因为人物不断改变方向使相机不断抖动造成视觉效果不佳,因此需要在相机里添加一个脚本来控制相机跟随人物移动。1. public class camerafollow : MonoBehaviour 2. 3. public Transform target; 4. 5. public Vector3 offset; 6. 7. void LateUpdate() 8. 9. transform.position = target.position+offset; 10. 11. 将需要被跟随的人物拖入至target中,点击游戏播放,调整offset的值,使相机可以看到完整人物。4.1.5 场景搭建利用ProBuilder与ProGirds插件,快速制作出学习用书柜、前台、医生办公室、等候室、宠物住院区,并将物体摆放好构建一个简易的宠物医院。游戏内还需要创建一个空对象命名为GameObject,用于存放大部分控制游戏功能实现的脚本图3-4 简易宠物医院4.2 学习功能实现学习功能是整个游戏流程的开始,玩家需要通过学习后才可以解锁其他功能。学习功能同时也能给玩家科普宠物疾病知识。游戏中将以模拟电子书本的形式展现 。4.2.1 学习功能的ui设计安装好Ngui插件后,上方开始栏会多出一个NGUI选项,点击NGUI->Open->Widget Wizard,创建一个新的UI界面,此时层级视图窗口会多出一个UI Root,切换成2D界面,双击UI Root,开始编辑。在Ngui中,由于插件内只能识别Atlas内的图片,如需使用自己绘制的图片,需要将所有非插件内的图片选中,右键->NGUI->Open Atlas Maker,然后把所选图片添加至新创建的Atlas,保存后即可使用。Simple texture用于放置图片,Lable用于编辑文字。Ngui提供了方便快捷的按钮脚本,需要变为按钮的图片或文字,只需在界面内右键->Attach内添加box collider和button script就能实现按钮功能。给按钮额外添加button scale脚本,可以让按钮在鼠标移入移出时有大小变化。图3-5 游戏内学习目录图3-6 游戏内部分学习内容4.2.2 学习功能的事件触发实现为了模拟生活中生活中需要走到书架前才能拿到书本学习,游戏内设定人物碰到书柜后才能打开学习功能。当第一次解锁学习功能之后,就可以不再需要跑到书柜面前触碰才能学习,游戏界面左下角会生成一个学习按钮,点开后可直接查看。因为需要人物触碰才能产生事件,所以需给书架添加box collider并设置合适大小。给书架加入脚本,使用OnCollisionEnter方法来实现。1. public class study3Dbutton : MonoBehaviour 2. 3. /获取书本UI 4. public TweenAlpha dashuben; 5. /获取游戏界面快捷学习按钮 6. public GameObject studybutton; 7. 8. void OnCollisionEnter(Collision collision) 9. 10. Time.timeScale = 0; 11. dashuben.PlayForward(); 12. studybutton.SetActive(true); 13. 14. TweenAlpha是Ngui提供的一种能实现UI隐藏显示的脚本,给附加了此类脚本的物体,之后把脚本取消勾选,将From的值设置为0,texture类还需要把NGUI Texture下的Color Tint设置成透明,设置完后就可以用PlayForward与PlayReverse来控制组件显示与隐藏。代码中使用Time.timeScale方法来防止人物触碰物体后还能继续移动,不断触发打开UI页面的问题。4.2.3 学习内容选择与翻页的功能实现给所需控制显示隐藏的UI添加TweenAlpha脚本。学习按钮一开始处于未激活状态,因此需要在void start里设置。1. public class bookUIClick : MonoBehaviour 2. 3. /获取整块内容组件 4. public GameObject Q; 5. 6. /获取需控制的学习内容 7. public TweenAlpha neirong; 8. public TweenAlpha mulu; 9. public TweenAlpha q1; 10. public TweenAlpha q2; 11. public TweenAlpha dashuben; 12. 13. public GameObject studybutton; 14. 15. void Start() 16. 17. /初始学习UI处于隐藏状态 18. studybutton.SetActive(false); 19. 20. 21. /点击打开书本 22. public void OnClickOpenBook() 23. 24. Time.timeScale = 0; 25. dashuben.PlayForward(); 26. 27. 28. /关闭书本 29. public void OnClickClose() 30. 31. dashuben.PlayReverse(); 32. Close(); 33. mulu.PlayForward(); 34. Time.timeScale = 1; 35. 36. /返回目录 37. public void OnClickReturn() 38. 39. mulu.PlayForward(); 40. Close(); 41. 42. /打开第一条知识 43. public void OnClickQ1() 44. 45. Open(); 46. ReturnOpen(); 47. GameObject childQ1 = Q.transform.Find("猫艾滋").gameObject; 48. childQ1.SetActive(true); 49. mulu.PlayReverse(); 50. q1.PlayForward(); 51. 52. /打开第二条知识 53. public void OnClickQ2() 54. 55. Open(); 56. ReturnOpen(); 57. GameObject childQ2 = Q.transform.Find("冠状病毒").gameObject; 58. childQ2.SetActive(true); 59. mulu.PlayReverse(); 60. q2.PlayForward(); 61. 62. 63. /打开内容界面 64. void Open() 65. 66. neirong.PlayForward(); 67. 68. /关闭内容界面 69. void Close() 70. 71. neirong.PlayReverse(); 72. 73. /防止返回后打开新的知识后有上次查看知识的文字残影 74. for (int i = 0; i < Q.transform.childCount; i+) 75. 76. GameObject childQ = Q.transform.GetChild(i).gameObject; 77. childQ.SetActive(false); 78. 79. 80. 81. /显示返回按钮 82. void ReturnOpen() 83. 84. GameObject childReturn = Q.transform.Find("返回").gameObject; 85. childReturn.SetActive(true); 86. 87. 为了方便操作,每一块知识都集合在同一个物体里面,使用GamObject.childReturn方法可以搜寻到物体下面的子物体。4.3 职位功能设计职位是判断玩家游戏内进度的一部分,不同的职位可以解锁不同的功能。游戏内一共设置了三个职位,分别是:“见习助理”、“见习医生”和“院长”。内置分数可以改变职位,主要通过答题测试来改变分数,若玩家分数低于0则结束游戏;若玩家达到见习医生则可以解锁新功能。4.4 答题测试功能实现4.4.1 测试界面ui界面设计与学习界面ui设计一样使用Ngui插件实现。图3-7 部分测试题目界面4.4.2 测试功能触发条件实现游戏内,在医生办公室中有一位npc,玩家需要通过解锁学习功能后并寻找到医生才能解锁测试功能。游戏开始时如没有解锁学习功能,则会被拒绝进入。解锁学习功能后可以进入办公室,接触到npc后会询问是否开启测试功能。需要用到两个collider来分别控制这两个事件的发生,这两个collider分别放在办公室门前与办公桌的位置。图3-8 两个collider位置摆放接着在UI界面制作两个界面,一个用来提示玩家没有解锁学习功能,一个用来询问是否开启测试功能。如图3-9所示。图3-9 npc提示检测玩家是否解锁学习功能,若未解锁弹出npc对话提示;若解锁该功能后则销毁此collider,功能实现具体代码如下:1. public class bangongshi : MonoBehaviour 2. 3. public TweenAlpha tip1; 4. public GameObject onoff; 5. public GameObject study; 6. 7. 8. void Start() 9. 10. /游戏开始时不显示提示 11. tip1.PlayReverse(); 12. 13. void OnCollisionEnter(Collision collision) 14. 15. /判断玩家是否解锁了快捷学习按钮 16. if (study.activeInHierarchy) 17. 18. Destroy(onoff); 19. else 20. Time.timeScale = 0; 21. tip1.PlayForward(); 22. 23. 24. 学习功能解锁后玩家接触npc则弹出询问是否开启测试对话框,若玩家开启后则在3秒后在界面右下角弹出测试功能按钮,延迟弹出测试按钮利用Invock方法来实现;若玩家选择不开启,则消失对话框,无法解锁游戏进度,再次触碰npc后再次解锁对话。1. public class say : MonoBehaviour 2. 3. public TweenAlpha tip1; 4. public TweenAlpha tip2; 5. public GameObject testtip; 6. public GameObject Tbutton; 7. 8. /开始游戏无法测试、学习按钮需在游戏中激活 9. void Start() 10. 11. Tbutton.SetActive(false); 12. 13. 14. /玩家未解锁学习功能时,点击关闭对话框 15. public void OnClickCloseTip() 16. 17. tip1.PlayReverse(); 18. Time.timeScale = 1; 19. 20. 21. /点击后延迟3秒后开启测试按钮并销毁collider 22. public void OnClickOpenTest() 23. 24. tip2.PlayReverse(); 25. Time.timeScale = 1; 26. Destroy(testtip); 27. Invoke("Yanshi", 3f); 28. 29. /点击关闭对话框,不解锁测试功能 30. public void OnClickCloseTip2() 31. 32. tip2.PlayReverse(); 33. Time.timeScale = 1; 34. 35. 36. /游戏界面显示测试按钮 37. void Yanshi() 38. 39. Tbutton.SetActive(true); 40. 41. 4.4.3 测试功能设计玩家在做测试题目的时候,题目是随机抽取的,答对得分,答错则扣分,随机可以抽取到相同的题目,可以巩固玩家所学习的知识。这里可以采用Random.Range随机方法来随机生成一个数,通过不同的数对应不同的题目来实现随机出现题目功能。为了防止玩家可以一直点击测试答题来提早结束游戏,游戏内的随机里设置了空题的数,既玩家点击测试后随机抽取的数中,有部分是会抽到没有题目的测试。出现的题目点击后就会消失,不管是否答题,答对或答错,都会在关闭试题后一段时间内不出现测试按钮,这里则采用Invoke方法可以实现。4.5 查看病例功能实现查看病例是玩家另外一种获得知识的途径,与书本内容不同,病例主要是为了模拟现实生活中,医生所学到的知识结合宠物症状来判断具体症状。这个功能需要玩家达到“见习医生”的条件后才可以解锁,若中途玩家的分数掉回“见习医生”以下,则会暂时关闭此功能。游戏内第一次达到“见习医生”后会给出提示,之后再次达到此条件则无提示。4.5.1 病例ui设计游戏内病例UI设计与测试UI设计相同,只需利用Ngui搭建完即可。图3-10 未达到解锁功能条件提示4.5.2 触发病例条件设计游戏内如果玩家没有达到相应条件,触碰到NPC后,则会弹出“你还不是见习医生,请学习做题