软件工程基于Unity3D的宠物医院模拟游戏的设计与实现Word格式文档下载.docx
《软件工程基于Unity3D的宠物医院模拟游戏的设计与实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件工程基于Unity3D的宠物医院模拟游戏的设计与实现Word格式文档下载.docx(37页珍藏版)》请在冰豆网上搜索。
第一部分:
绪论,主要阐述毕业设计选题的目的与研究意义、国内外研究现状以及本文的结构介绍;
第二部分:
介绍了开发游戏所用到的工具与插件介绍;
第三部分:
详细描述了游戏内的需求与设计;
第四部分:
详细描述了游戏内各个功能的制作与实现;
第五部分:
游戏的UI界面设计、描述游戏的整合与导出并进行测试;
第六部分:
总结游戏内的不足与今后的改进。
第2章开发工具介绍
2.1Unity3D介绍
Unity3D是一款由UnityTechnologies所研发的跨平台2D/3D游戏引擎,开发的游戏可以部署到多个主流平台,如常见的:
Windows、MacOS、Android与iOS。
除游戏开发外还可以实现视频制作,其对模型资源的兼容性高,多个主流建模软件生成的模型均可以在Unity3D中完美导入,并可以在原模型修改后自动更新。
Unity3D给用户提供了可视化操作界面,利用内置插件,可以让新手短时间内熟悉并开发出游戏原型。
Unity3D主要支持三种语言:
C#、UnityScript(多被称为“Javascript”)和BOO。
Unity2017.2测试版后的版本在新建中已经不再包含Javascript选项,但仍然支持使用,需在Unity编辑器外创建再导入。
2.2ProBuilder插件介绍
ProBuilder插件是一款Unity2018.1版本以上自带的官方建模插件,Unity2017.x版本可以直接在AssetStore下载使用。
此插件是3D建模和关卡设计工具的独特组合,为构建简单的几何体进行了操作优化处理,但也可以进行详细的编辑和UV展开。
使用ProBuilder可以快速构建结构复杂的地形、车轮和武器的原型,或制作自定义碰撞几何体。
主要特点有:
动态用户界面、挤出插入功能、建立多边形功能、多种规则形状和着色等。
2.3ProGrids插件介绍
ProGrids插件可以为我们提供视觉和功能上的网格,它们可以使所有操作都在三个轴上对齐。
Probuilder结合ProGrids使用可以提高建模速度,使构建的几何体构造更为精准。
2.4Ngui插件介绍
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-->
PackageManager,找到Probuilder与ProGrids,点击Install下载即可,如图3-1所示。
图3-1Probuilder与ProGrids插件安装
4.1.2配置人物动画
将人物模型chan拖入场景中,创建一个新的animator命名为playercontroller并双击打开动画窗口,将动画wait与walk拖入BaseLayer窗口并连接至图3-2所示。
图3-2动画配置
为了避免人物动作需要播放完后才能切换新的动作,需要点击图3-2白色箭头,然后在Inspector窗口找到HasExitTime,将勾选取消即可。
如图3-3所示。
图3-3
为后续控制人物移动与站立两种状态下的动画切换,需在Parameters里添加两个bool类型的变量,分别命名为wait和walk。
4.1.3人物移动实现
给人物模型分别添加Animator、Rigidbody与CapsuleCollider组件。
为防止人物长时间不动后会倒在地上,需锁定人物模型在x轴与z轴的旋转,在Rigidbody里找到FreezeRotation,将x轴与z轴勾选上即可锁定。
接着在模型下面添加一个新的脚本命名为player。
因为人物移动需要每一帧都检测,因此将函数写入voidUpdate里。
将人物移动速度设置为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.
Animator
anime;
10.
11.
bool
wait;
12.
walk;
13.
14.
void
Start()
15.
{
16.
//获取人物动画控件
17.
anime
GetComponent<
Animator>
();
18.
//人物初始为等待状态
19.
wait
true;
20.
walk
false;
21.
}
22.
Update()
23.
24.
25.
horizontal
Input.GetAxis("
Horizontal"
);
26.
vertical
Vertical"
27.
Vector3
direction
new
Vector3(horizontal,
0,
vertical);
28.
29.
if(direction
!
Vector3.zero)
30.
31.
change();
32.
33.
//角色旋转至指定方向
34.
transform.rotation
Quaternion.LookRotation(direction);
35.
//角色移动
36.
transform.Translate(Vector3.forward
*
Time.deltaTime);
37.
38.
else
39.
40.
41.
wait=true
;
42.
43.
anime.SetBool("
walk"
walk);
44.
wait"
wait);
45.
46.
47.
//避免出现特殊情况,全部设置为false
48.
change()
49.
50.
51.
52.
53.}
经过调试,当人物移动速度为2.5f时较为合适。
4.1.4设置相机跟随人物移动
相机跟随人物移动是游戏内必不可少的一部分,虽然直接将相机拖入到人物中也可以实现相机跟随,但会因为人物不断改变方向使相机不断抖动造成视觉效果不佳,因此需要在相机里添加一个脚本来控制相机跟随人物移动。
1.public
camerafollow
2.{
3.
Transform
target;
5.
offset;
6.
LateUpdate()
transform.position
target.position+offset;
11.}
将需要被跟随的人物拖入至target中,点击游戏播放,调整offset的值,使相机可以看到完整人物。
4.1.5场景搭建
利用ProBuilder与ProGirds插件,快速制作出学习用书柜、前台、医生办公室、等候室、宠物住院区,并将物体摆放好构建一个简易的宠物医院。
游戏内还需要创建一个空对象命名为GameObject,用于存放大部分控制游戏功能实现的脚本
图3-4简易宠物医院
4.2学习功能实现
学习功能是整个游戏流程的开始,玩家需要通过学习后才可以解锁其他功能。
学习功能同时也能给玩家科普宠物疾病知识。
游戏中将以模拟电子书本的形式展现。
4.2.1学习功能的ui设计
安装好Ngui插件后,上方开始栏会多出一个NGUI选项,点击NGUI-->
Open-->
WidgetWizard,创建一个新的UI界面,此时层级视图窗口会多出一个UIRoot,切换成2D界面,双击UIRoot,开始编辑。
在Ngui中,由于插件内只能识别Atlas内的图片,如需使用自己绘制的图片,需要将所有非插件内的图片选中,右键-->
NGUI-->
OpenAtlasMaker,然后把所选图片添加至新创建的Atlas,保存后即可使用。
Simpletexture用于放置图片,Lable用于编辑文字。
Ngui提供了方便快捷的按钮脚本,需要变为按钮的图片或文字,只需在界面内右键-->
Attach内添加boxcollider和buttonscript就能实现按钮功能。
给按钮额外添加buttonscale脚本,可以让按钮在鼠标移入移出时有大小变化。
图3-5游戏内学习目录
图3-6游戏内部分学习内容
4.2.2学习功能的事件触发实现
为了模拟生活中生活中需要走到书架前才能拿到书本学习,游戏内设定人物碰到书柜后才能打开学习功能。
当第一次解锁学习功能之后,就可以不再需要跑到书柜面前触碰才能学习,游戏界面左下角会生成一个学习按钮,点开后可直接查看。
因为需要人物触碰才能产生事件,所以需给书架添加boxcollider并设置合适大小。
给书架加入脚本,使用OnCollisionEnter方法来实现。
study3Dbutton
//获取书本UI
TweenAlpha
dashuben;
//获取游戏界面快捷学习按钮
GameObject
studybutton;
OnCollisionEnter(Collision
collision)
Time.timeScale
0;
dashuben.PlayForward();
studybutton.SetActive(true);
14.}
TweenAlpha是Ngui提供的一种能实现UI隐藏显示的脚本,给附加了此类脚本的物体,之后把脚本取消勾选,将From的值设置为0,texture类还需要把NGUITexture下的ColorTint设置成透明,设置完后就可以用PlayForward与PlayReverse来控制组件显示与隐藏。
代码中使用Time.timeScale方法来防止人物触碰物体后还能继续移动,不断触发打开UI页面的问题。
4.2.3学习内容选择与翻页的功能实现
给所需控制显示隐藏的UI添加TweenAlpha脚本。
学习按钮一开始处于未激活状态,因此需要在voidstart里设置。
bookUIClick
//获取整块内容组件
Q;
//获取需控制的学习内容
neirong;
mulu;
q1;
q2;
//初始学习UI处于隐藏状态
studybutton.SetActive(false);
//点击打开书本
OnClickOpenBook()
//关闭书本
OnClickClose()
dashuben.PlayReverse();
Close();
mulu.PlayForward();
1;
//返回目录
OnClickReturn()
//打开第一条知识
OnClickQ1()
Open();
ReturnOpen();
childQ1
Q.