1、软件工程基于Unity3D的宠物医院模拟游戏的设计与实现摘要随着生活水平的不断提高与科技的发展,人们开始不满足于物质上的需求,饲养猫狗人数大幅度增长。可在饲养过程中难免会遇到各种各样的问题。当今社会,玩游戏又成了人们的主要娱乐与消遣方式。模拟类科普游戏可以让人们在消磨时间的同时学习到知识,虽然不能完全代替传统的正规教育,但仍然可以起到教育的作用。Unity3D作为一款既能开发2D又能3D游戏、且可部署到多个主流平台内的软件,是一款被较多开发者使用的游戏开发引擎。而市面上暂时还没有发现有关科普宠物疾病类的游戏,本论文研究宠物医院模拟游戏开发,不是单纯为了娱乐,更重要的是为了能够给更多的人通过玩游
2、戏了解到宠物疾病相关知识。本文主要描述了利用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 inevi
3、table that various problems will be encountered during the feeding process.In todays 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
4、 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 o
5、n 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 deve
6、lop similar games in the future.Keyword:Unity3D Pet Hospital Simulation game 第1章 绪论1.1 选题的目的和意义宠物,就像我们的亲人、伙伴一样,有一只宠物陪伴在身边,可以缓解人们的孤独感、寂寞感。随着人们物质生活水品的不断提高,越来越多的人开始饲养起了宠物。然而,宠物跟人类一样,也有各种各样的疾病发生,但治疗方案却跟人类完全不同,而许多宠物饲养人员并不能很清楚地了解宠物疾病给宠物带来地危害,也不了解如何预防疾病,让许多宠物就此丧失生命,同时也给饲主带来精神上的痛苦。当今社会,玩游戏成了人们的主要娱乐与消遣方式。而如今
7、,游戏已经不再属于玩物丧志的范畴,模拟类科普游戏可以让人们在消磨时间的同时学习到知识,虽然不能完全代替传统的正规教育,但仍然可以起到教育的作用,可谓放松与学习两不误。 本选题的研究目的是为了让人们能够在游戏中更容易更方便地了解到宠物疾病知识,以测试的形式来巩固人们对宠物健康知识的记忆,从而更好的照顾自家的宠物,让自家宠物远离病痛。1.2 国内外研究现状目前国内在科普宠物疾病方面有哔哩哔哩出品的首档医疗观察类真人秀宠物医院,此节目有科普一些常见的疾病预防等。在游戏方面是娱乐休闲游戏,不具备知识传播功能,还有一些是针对人类疾病而设定的,而在国外的模拟人生系列的游戏中,虽有宠物医院的设定,但只能让玩
8、家去简单的经营,而不能让玩家学习到有关宠物疾病的相关知识。因此研究一款宠物医院模拟科普类游戏是很有必要的。1.3 论文结构概述本文主要分为六个部分:第一部分:绪论,主要阐述毕业设计选题的目的与研究意义、国内外研究现状以及本文的结构介绍;第二部分:介绍了开发游戏所用到的工具与插件介绍;第三部分:详细描述了游戏内的需求与设计;第四部分:详细描述了游戏内各个功能的制作与实现;第五部分:游戏的UI界面设计、描述游戏的整合与导出并进行测试;第六部分:总结游戏内的不足与今后的改进。第2章 开发工具介绍2.1 Unity3D介绍Unity3D是一款由Unity Technologies所研发的跨平台2D/3
9、D游戏引擎,开发的游戏可以部署到多个主流平台,如常见的:Windows、MacOS、Android与iOS。除游戏开发外还可以实现视频制作,其对模型资源的兼容性高,多个主流建模软件生成的模型均可以在Unity3D中完美导入,并可以在原模型修改后自动更新。Unity3D给用户提供了可视化操作界面,利用内置插件,可以让新手短时间内熟悉并开发出游戏原型。Unity3D主要支持三种语言:C#、UnityScript(多被称为“Javascript”)和BOO。Unity2017.2测试版后的版本在新建中已经不再包含Javascript选项,但仍然支持使用,需在Unity编辑器外创建再导入。2.2 Pr
10、oBuilder插件介绍ProBuilder插件是一款Unity2018.1版本以上自带的官方建模插件,Unity2017.x版本可以直接在Asset Store下载使用。此插件是3D建模和关卡设计工具的独特组合,为构建简单的几何体进行了操作优化处理,但也可以进行详细的编辑和UV展开。使用ProBuilder可以快速构建结构复杂的地形、车轮和武器的原型,或制作自定义碰撞几何体。主要特点有:动态用户界面、挤出插入功能、建立多边形功能、多种规则形状和着色等。2.3 ProGrids插件介绍ProGrids插件可以为我们提供视觉和功能上的网格,它们可以使所有操作都在三个轴上对齐。Probuilder
11、结合ProGrids使用可以提高建模速度,使构建的几何体构造更为精准。2.4 Ngui插件介绍Ngui是一个功能强大的UI系统和Unity的事件通知框架,均使用C#编写,并严格遵循KISS原则。它具有简洁的代码和极简的方法。许多behaviour类都保持在两百行代码以下。该插件全面支持ios、Android、Blackberry、win8、wp8、flash。使用Ngui就像使用Unity,将现成的控件(例如按钮,复选框,滚动条和其他控件)拖放到场景视图中,或者使用类似于Lego的方法制作自己的控件。将控件另存为预设体,即可在任何地方重复使用。第3章 游戏需求分析3.1 科普类游戏的需求分析随
12、着科学教育类电子游戏的发展以及教育理念的日新月异,科学教育类电子游戏已经被视为科学教育的一个非主流的形式8。在如今电子游戏行业迅速的发展的时代下,科普类游戏较于一般游戏来讲,其主要以普及科学知识为主,娱乐为次,在家长眼里不会被认为是玩物丧志的游戏,得到了广大家长们的认可,游戏不局限于青少年,不同年龄层次的用户均能体验游戏。 3.2 游戏功能需求分析目前饲养宠物陪伴自己生活的人越来越多,功课有时候做的不够到位,宠物发生状况时不正当的处理方式导致问题更为严重。游戏内最主要的是给人们普及疾病相关知识与处理知识。因此宠物医院模拟游戏较为重要的功能有以下几个:第一,游戏内玩家将模拟刚毕业到宠物医院工作的
13、见习助理,根据自己的能力不断成长,提升自己的职位。第二,学习功能。玩家主要通过学习功能来获取宠物疾病的理论知识,也仅限于理论知识,模拟现实生活中医生需要在空闲时间额外看书学习的行为。第三,测试功能。这个功能是模拟医院内的考核制度。主要考察书本内的理论知识。为了能够重复玩家的记忆,答卷采用随机出题的形式展示,通过随机来出现重复的题目,巩固玩家在游戏内学到的知识。第四,查看实际病例功能。病例功能主要是让玩家学习到除了书本理论知识外的知识内容。主要记录宠物真实病情案例,病情诊断条件与治疗方案。3.3 游戏玩法设计从功能模块方面可以决定游戏的玩法,玩家通过控制人物移动触碰场景内的物体,根据提示解锁不同
14、的功能,解锁测试功能后,则根据测试的分数判断是否具备解锁查看实际病例的功能。判断游戏结束的标准有两个,一个是低于初始分,判定为失败;一个是高于设定的值(可修改),判定为游戏通关。具体的方法实现设计如下:一,人物移动以及移动动画实现功能:利用Unity自带方法来监听玩家对键盘的操作,从而控制人物移动;利用Animator控制器,根据游戏内判断人物是否移动,从而改变动作的布尔值来改变人物不同的动画播放。二,学习功能:学习功能主要利用Ngui插件来完成界面,通过使用插件内自带的TweenAlpha脚本实现UI界面的动态效果,利用PlayForward方法控制UI显示,利用PlayReverse方法控
15、制UI的隐藏。三,测试功能:首先利用SetActive控制测试功能解锁的开关是否在场景内显示,利用activeInHierarchy判断开关是否存在于场景内,若存在则开启测试功能;测试题目则用Random.Range随机方法,在自定义的范围内随机生成一个整数,不同的数字将对应产生不同的题目。四,职位功能:此功能是定义游戏进度的一个标准,在后台定义玩家初始分数统一为0,之后通过测试功能改变自己的分数值,获得不同的职位,之后解锁新的功能。低于初始分数则判断为游戏失败,结束游戏。3.4 本章小结从宠物模拟医院的功能需求上进行分析,决定了游戏的四大功能模块。在分析中确定了游戏的主要玩法以及实现功能模块
16、用到的方法。结合三部分内容得到了本文所研究的游戏的总体方案设计。第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拖入场景中,创
17、建一个新的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组件。为
18、防止人物长时间不动后会倒在地上,需锁定人物模型在x轴与z轴的旋转,在Rigidbody里找到Freeze Rotation,将x轴与z轴勾选上即可锁定。接着在模型下面添加一个新的脚本命名为player。因为人物移动需要每一帧都检测,因此将函数写入void Update里。将人物移动速度设置为public,方便直接在unity界面中调整合适速度。1.usingSystem.Collections;2.usingSystem.Collections.Generic;3.usingUnityEngine;4.5.publicclassplayer:MonoBehaviour6.7.publicflo
19、atspeed=1f;8.9.publicAnimatoranime;10.11.publicboolwait;12.publicboolwalk;13.14.voidStart()15.16./获取人物动画控件17.anime=GetComponent();18./人物初始为等待状态19.wait=true;20.walk=false;21.22.voidUpdate()23.24.25.floathorizontal=Input.GetAxis(Horizontal);26.floatvertical=Input.GetAxis(Vertical);27.Vector3direction=
20、newVector3(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.else39.40.change();41.wait=true;42.43.anime.SetBool(walk,wal
21、k);44.anime.SetBool(wait,wait);45.46.47./避免出现特殊情况,全部设置为false48.voidchange()49.50.wait=false;51.walk=false;52.53.经过调试,当人物移动速度为2.5f时较为合适。4.1.4 设置相机跟随人物移动相机跟随人物移动是游戏内必不可少的一部分,虽然直接将相机拖入到人物中也可以实现相机跟随,但会因为人物不断改变方向使相机不断抖动造成视觉效果不佳,因此需要在相机里添加一个脚本来控制相机跟随人物移动。1.publicclasscamerafollow:MonoBehaviour2.3.publicTr
22、ansformtarget;4.5.publicVector3offset;6.7.voidLateUpdate()8.9.transform.position=target.position+offset;10.11.将需要被跟随的人物拖入至target中,点击游戏播放,调整offset的值,使相机可以看到完整人物。4.1.5 场景搭建利用ProBuilder与ProGirds插件,快速制作出学习用书柜、前台、医生办公室、等候室、宠物住院区,并将物体摆放好构建一个简易的宠物医院。游戏内还需要创建一个空对象命名为GameObject,用于存放大部分控制游戏功能实现的脚本图3-4 简易宠物医院4
23、.2 学习功能实现学习功能是整个游戏流程的开始,玩家需要通过学习后才可以解锁其他功能。学习功能同时也能给玩家科普宠物疾病知识。游戏中将以模拟电子书本的形式展现 。4.2.1 学习功能的ui设计安装好Ngui插件后,上方开始栏会多出一个NGUI选项,点击NGUI-Open-Widget Wizard,创建一个新的UI界面,此时层级视图窗口会多出一个UI Root,切换成2D界面,双击UI Root,开始编辑。在Ngui中,由于插件内只能识别Atlas内的图片,如需使用自己绘制的图片,需要将所有非插件内的图片选中,右键-NGUI-Open Atlas Maker,然后把所选图片添加至新创建的Atl
24、as,保存后即可使用。Simple texture用于放置图片,Lable用于编辑文字。Ngui提供了方便快捷的按钮脚本,需要变为按钮的图片或文字,只需在界面内右键-Attach内添加box collider和button script就能实现按钮功能。给按钮额外添加button scale脚本,可以让按钮在鼠标移入移出时有大小变化。图3-5 游戏内学习目录图3-6 游戏内部分学习内容4.2.2 学习功能的事件触发实现为了模拟生活中生活中需要走到书架前才能拿到书本学习,游戏内设定人物碰到书柜后才能打开学习功能。当第一次解锁学习功能之后,就可以不再需要跑到书柜面前触碰才能学习,游戏界面左下角会生
25、成一个学习按钮,点开后可直接查看。因为需要人物触碰才能产生事件,所以需给书架添加box collider并设置合适大小。给书架加入脚本,使用OnCollisionEnter方法来实现。1.publicclassstudy3Dbutton:MonoBehaviour2.3./获取书本UI4.publicTweenAlphadashuben;5./获取游戏界面快捷学习按钮6.publicGameObjectstudybutton;7.8.voidOnCollisionEnter(Collisioncollision)9.10.Time.timeScale=0;11.dashuben.PlayFor
26、ward();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脚本。学习按钮一开
27、始处于未激活状态,因此需要在void start里设置。1.publicclassbookUIClick:MonoBehaviour2.3./获取整块内容组件4.publicGameObjectQ;5.6./获取需控制的学习内容7.publicTweenAlphaneirong;8.publicTweenAlphamulu;9.publicTweenAlphaq1;10.publicTweenAlphaq2;11.publicTweenAlphadashuben;12.13.publicGameObjectstudybutton;14.15.voidStart()16.17./初始学习UI处于
28、隐藏状态18.studybutton.SetActive(false);19.20.21./点击打开书本22.publicvoidOnClickOpenBook()23.24.Time.timeScale=0;25.dashuben.PlayForward();26.27.28./关闭书本29.publicvoidOnClickClose()30.31.dashuben.PlayReverse();32.Close();33.mulu.PlayForward();34.Time.timeScale=1;35.36./返回目录37.publicvoidOnClickReturn()38.39.mulu.PlayForward();40.Close();41.42./打开第一条知识43.publicvoidOnClickQ1()44.45.Open();46.ReturnOpen();47.GameObjectchildQ1=Q.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1