虚拟现实仿真毕业论文.docx
《虚拟现实仿真毕业论文.docx》由会员分享,可在线阅读,更多相关《虚拟现实仿真毕业论文.docx(40页珍藏版)》请在冰豆网上搜索。
虚拟现实仿真毕业论文
电子与信息工程学院
本科毕业论文
论文题目基于Unity3D的工程建筑
仿真实践教学平台设计
学生马俊文
学号
专业电气工程与其自动化
班级1
指导教师阮国龙
2016年5月
摘要
随着虚拟现实仿真技术的发展,各大高校已开始运用此技术进行仿真教学,使学生讲理论知识与实际操作相结合。
应建筑专业的要求,我们设计了一款建筑虚拟仿真教学平台系统。
本系统主要运用到了C#语言知识,数据库SQLServer操作和Unity3D软件,通过UI操作界面与3D场景模型的交互,从而模拟出了学生所需要学习的实习环境。
本系统自带了答题系统与评估系统,并真正做到了答题与场景动画相结合,从而让学生在答题途中也能接触到实际的操作环境。
本系统分为了多个模块,每个模块所表现的容页有所不同。
学生通过新的教学方式,不一样的学习环境,定能真正的将理论和实际结合学的更为透彻。
关键词:
虚拟现实;数据库;计算机语言;学习;Unity3D
ABSTRACT
Withthedevelopmentofvirtualrealitysimulationtechnology,themajorcollegesanduniversitieshavebeguntousethistechnologytocarryoutsimulationteaching,sothatstudentsspeaktheoreticalknowledgeandpracticaloperation.Wedesignedateachingplatformsystemforbuildingvirtualsimulation.ThesystemismainlyappliedtotheC#languageknowledge,databaseServerSQLoperationandUnity3Dsoftware,throughtheUIinterfaceandthe3Dscenemodelinteraction,thussimulatingthestudentsneedtolearnthepracticeenvironment.
Thesystemcomeswiththeanswersystemandassessmentsystem,andreallydotheanswerandsceneanimationcombination,sothatstudentsintheansweronthewaytobeabletocontactwiththeactualoperatingenvironment.Thesystemisdividedintoseveralmodules,eachmoduleoftheperformanceofthecontentpageisdifferent.Studentsthroughthenewteachingmethods,notthesameasthelearningenvironment,willbeabletoreallycombinetheoryandpracticemorethoroughly.
KEYWORDS:
Virtualreality;Database;Computerlanguage;Study;Unity3D
一绪论
本论文说明了当今学生学习无法将理论知识与实际操作相结合的问题,阐述了运用虚拟现实仿真技术解决这一难题的意义所在,以与国众多高校慢慢都开始使用此技术来继续进一步的教学。
为此,我们项目组设计出一款能够真正让学生学以致用的,基于虚拟现实仿真技术来达到学生真正学习的软件,该软件能让学生在虚拟的仿真场景中,与答题相结合的形式,从而更好的学习相应的知识。
课题背景
传统的建筑教学,是在完整的理论学习完毕后,到具体的建设工作单位进行实习。
单纯的理论学习阶段,与陌生的实习环境,常常使学生不能学以至用,教学质量得不到保证。
学生毕业后,需经过相当长的时间来适应工作环境和社会生活,这造成了很大的不便。
然而,随着计算机科技时代的到来,人们生活水平也不断提高,运用计算机技术来改善我们的生活,成为了一种趋势所在。
运用虚拟现实仿真技术,近几年来越来越多的行业已经使用到了该技术,如楼盘模拟展示、医疗器械运用展示等等。
而各大高校也开始运用此技术来进行教学,其中以建筑专业为例,所需要的教学质量要求越来越高,使用虚拟现实仿真技术,则可以让学生在模拟场景中学习理论知识,真正做到将理论与实际操作相结合,让学生学的更为彻底。
与此同时,软件模拟的教学环境给学生学习带来的巨大的新鲜感,让学生在体验时带来更多的学习方法。
课题研究的目的和意义
运用网络模拟的教学方式,根据不同的教育层次,运用的具体容会有所差别,但形式是与外界学生就业的工作单位相同或相近,以便使学生走出校门后就能马上满足工作单位的用人需求,并能在岗位上有所作为。
虚拟现实仿真技术,是近几年来才开始慢慢进入人们的视线。
其实这种技术在很早就已经被提出,只是实现并推广的时间很长。
现在,使用虚拟现实仿真技术,是一种必然的趋势,各大行业都可以运用到。
这解决了人们当今生活中,有些难以实现的地方或者是更为方便的提供人们参考或学习等。
而对于本课题中的建筑教学方面,也有着十分重大的意义。
其一,学生不需要再面对干枯的文字来进行答题,配合着动画进行答题,就这一点来看,就给了学生很大的一个新鲜感,从而也有了更大的学习乐趣。
其二,本设计也自带了成绩管理系统,每个课题答完后,除主观题需老师评分外,客观题系统可以自动给出,这也是很大的一个方便,节省了人力资源。
其三,多次利用且十分方便,学生需要学习直接上机进行操作即可,也不再需要复印沉重的试卷,学生可以随时随地的根据自己需要进入相对应的课题进行学习。
其四,多个课题容可以全部糅合用一个软件来进行,但是各个课题的容却可以很好的分开进行各自的环节,软件的容可以做的十分的丰富。
课题的主要研究工作
本设计主要做了如下几方面的工作:
1)确定系统的总体课题容和设计方案
2)运用Unity3D进行逻辑上的代码处理,以与用3DMAX进行场景模型制作和人物动画制作。
3)各个课题设计环节的调试与修改。
本设计主要运用到了Unity3D软件,3DMAX软件,C#语言知识以与SQL数据库处理。
在代码设计框架方面,根据课题的容不同,制定出一个统一的答题框架,但凡是相对应的客观题,皆可用此框架答题。
各个版块的设计根据课题容的不同,而制作出相对应的模型与动画,实现出对应的逻辑处理等。
最后再将答题结果写入数据库,以保存学生的答题数据。
二系统总体设计
系统功能
1.本系统应带有答题功能与评估功能,方便学生了解到自己的学习情况。
2.本系统应带有登录功能,各自的学生成绩应该分开存入到数据库中,方便老师了解到各个学生的答题情况,从而做出相应的处理。
3.本系统中,动画与答题应相结合,在答题中尽量观看到动画效果,让学生了解到实际的场景环境。
4.每个版块的容应尽量不同,展现出不一样的环境容。
系统设计原则
系统的设计结合用户的实际需求,遵循以下设计原则:
●实用性:
结合建筑专业的各项专业知识,学生能够上机操作,系统自动进行考核评分,实时掌握学生的学习情况。
●可靠性:
系统可以长时间运行,各设备性能可靠且运行稳定。
●先进性:
系统的专业知识应当遵循时代技术的最前沿,功能和性能等都应达到最先进的水平。
●简易性:
用户操作过程简捷,使用起来一目了然。
●灵活性:
系统在各个电脑上都能使用,力求做到对操作系统的充份兼容性。
系统结构图
本系统应由SQLServer数据库提供数据管理功能,利用C#代码实现UI界面和3D场景与人物动画的互动。
具体结构图可见图2-1。
图2-1系统结构图
三系统功能设计
本系统设计流程图大致见图3-1。
图3-1系统设计流程
数据库设计
在数据库设计方面,首先得先确定应建立几个表。
建立的表对应如下:
1.学生登录User表,表3-1
表3-1学生信息表(User)
字段
说明
类型(长度)
Id
利于修改操作
int
UserName
用户名
int
Password
密码
nvarchar(255)
Name
学生
nvarchar(255)
此表中,UserName列是存放于使用该系统的人员的用户名,Password列存放的是密码,Role列代表区分判断老师与学生。
Name列存放的是对应的名字。
2.学生答题的题目容表,表3-2。
表3-2学生答题题目表(DingECeDing)
字段
说明
类型(长度)
chapter
单元号
nvarchar(255)
qid
题目编号
float
title
题目名称
nvarchar(255)
question
问题
nvarchar(255)
options
答案选项
nvarchar(255)
answer
正确答案
nvarchar(255)
hint
助训
nvarchar(255)
此表中,chapter列与qid列是为了确定题目的唯一性,title列是存放的每一小单元题目的总汇,question列是每个题目的答题容,options列是表示此题目有多少个选项答案,answer列代表的是此题目的正确答案,hint列是表示此题目的助训容。
但凡是相同类型的答题框架,都需要用到此数据表,可以再单独创建,但是每个列应与此表相同。
3.学生每题答题结果表,表3-3。
表3-3学生答题结果表(QResult)
字段
说明
类型(长度)
Id
便于修改
int
ExamId
考试批次
float
Sid
学生用户名
int
Cid
课程编号
int
Qid
题目编号
nvarchar(255)
ExamDate
考试日期
datetime
Result
分数结果
float
Unit
单元名称
nvarchar(255)
Chapter
单元
nvarchar(255)
此表中ExamId列代表的是学生每次进入该系统的批次,SId列代表的是学生的用户名,CId列代表的是答题课程的编号,QId和Chapter列依然是确认题目的唯一性,ExamDate是代表本次答题的时间,Result列是题目对应的分数,Unit列是单元的名称。
4.学生课程总分表,表3-4。
表3-4学生答题结果总分表(CResult)
字段
说明
类型(长度)
Id
便于修改操作
int
Cid
题目课程编号
int
Sid
用户名
int
ExamId
考试批次
float
ExamDate
考试日期
datetime
Result
分数结果
float
此表中CId列代表的是课程的编号,SId代表学生的用户名,ExamId代表学生的考试批次,ExamDate代表该课程考试的时间,Result代表的是本次课程考试的总分。
登录界面设计
登录界面的程序设计,大致的方向可以遵照此流程图3-2。
图3-2登录界面设计流程
在创建Unity3D工程后,新建一个Scene场景,先导入NGUI插件,再导入我们需要进行排版的图片。
在界面设计上应尽量遵循排版美观的原则,官方Unity3D自带的UI系统,在处理UI界面上相对麻烦,所以需使用NGUI插件,更为方便我们进行UI界面的设计与处理。
导入插件后在Unity工具栏上会多出一列NGUI,再依次点击Create—>Texture,于出现的UI界面中,将我们刚已导入的图片换置右方的Inspector列表中的Texture上去。
我们导入后的所有文件皆在Project栏目里面。
界面的设计中上方放入学校的名字与本系统的名称,可以做一些颜色的处理,文字添加方式依旧是NGUI->Create->Label。
于右方的Inspector中进行Label的细节处理,在Gradient里勾选对话框,再进行Top与Bottom的调色,文字颜色设计尽量上方偏深蓝色,下方偏淡蓝绿为主,文字输入于右方的Text中进行更改。
输入框的导入在Projcet列中搜索input,将后缀为prefab的预置体拖入到scene场景中对应的位置即可。
点击运行后,于Game场景中就可在刚放入的input里输入文字了。
在需要进行点击的“登录”一栏上,需要添加BoxCollider,于Scene中对应的位置右键->Attach->BoxCollider,再于右方的Inspector的最下方点击AddComponent,于出现的对话框中输入Button并点击,于是此登陆框就有了触碰效果。
文字图片进行排版后的效果图大致上见图3-3。
图3-3登录界面
然后在逻辑处理上,我们需要添加脚本,否则这个界面只能观看而没有任何作用。
在Hierarchy栏里依次点击Create->Createempty,点击新出来的物体GameObject,重命名为Login,方便我们修改检查。
再于右方的AddComponent中进行添加脚本,NewScript,双击脚本。
新创建的脚本代码见图3-4。
图3-4新建C#语言脚本
登录代码设计流程见图3-5。
图3-5登录代码流程
首先连接数据库,新创立脚本,名字更为CreatSQL,并放入一创立的新空物体上,空物体命名为Login,数据库的连接代码部分如下。
stringconnectionString=string.Format("Server={0};Database={1};UserID={2};Password={3};",host,database,id,pwd);
dbConnection=newSqlConnection(connectionString);
dbConnection.Open();
Debug.Log("ConnectedtoDatabase");
host变量代表的是数据库的IP,我们可以输入localhost,即代表本地。
Database代表的是数据库的名称,id和pwd分别指的是数据库的用户名和密码。
Debug.Log,用于控制台输出,是否连接成功。
以上代码放入图3-6的voidstart(){}函数里。
除此之外,数据库代码需要在开头进行引用,在代码的开头输入如下代码。
usingSystem.Collections;
usingSystem.Data;
usingSystem.Data.SqlClient;
输入完成后,ctrl+s进行保存后,点击Unity3D中的播放按钮进行调试,看控制台是否有输出"ConnectedtoDatabase",没有则需要继续调试。
数据库连接上后,再需要获取到用户输入的用户名和密码。
同样我们需要再新建一个脚本防止混淆,也便于修改,命名为Login_start。
获取用户输入的信息代码如下。
publicUILabel_username;
publicUIInput_password;
publicstaticstring_username_only;
publicstaticstring_password_encryption;
publicvoidOnLogin()
{
_username_only=_username.text;
_password_encryption=Md5Sum(_password.value.ToString());
}
publicstringMd5Sum(stringinput)
{
MD5md5=newMD5CryptoServiceProvider();
byte[]bytes=Encoding.UTF8.GetBytes(input);
bytes=md5puteHash(bytes);
md5.Clear();
stringret="";
ret="{MD5}"+System.Convert.ToBase64String(bytes);
returnret;
}
变量_username_only代表的是用户的用户名,_password_encryption是代表的密码,MD5Sum函数是用来进行加密处理。
获取到了用户名和密码后,再将两者与数据库里的用户名和密码进行匹配,匹配的代码如下。
stringsqlCmd="Select*fromUser$whereUserName="+double.Parse(_username_only)+"andPassword='"+_password_encryption+"'";
SqlCommandcmd=newSqlCommand(sqlCmd,CreatSQL.dbConnection);
SqlDataReaderreader=cmd.ExecuteReader();
if(reader.Read())//判断是否找到
{
Application.LoadLevel("Main");
}
else
{
UI_wrong.SetActive(true);
}
reader.Close();
代码设计中使用Select语句,可以方便的查找并通过返回结果进行判断。
如果判断成功,则进入下一场景,否则则提示密码错误。
版块容设计
根据图3-1的流程图,登录后的主场景中,需要能进入4个不同的课程场景中,进入不同的场景需要用一段代码Application.LoadLevel("场景名称")。
于是在界面排版上我们需要标示出4个模块,并用文字放于上面给予提示。
基本的排版操作都大致相同,排出后的效果图见图3-6。
图3-6登录后主界面
为了使本系统设计更为人性化,在图上方的右上角给出了几个标示。
其一是显示出了该学生的与日期,可以明确的告诉学生今天的考试时间与是否登录的是自己的账号。
其二是显示出了进入此系统开始后所使用的时间,类似于一个计时系统,但是没有时间规定,这个可以根据需要设计出来,并且也并不复杂。
其三是右上角的退出按钮,点击后就退出到最开始的登录界面。
在逻辑方面的处理,都需要用代码进行控制,学生的和日期的获取代码如下。
publicstaticstringdate;//日期
stringyear;
stringmonth;
stringday;
publicstaticstringstu_name;//学生
voidStart(){
year=System.DateTime.Now.Year.ToString();
month=System.DateTime.Now.Month.ToString();
day=System.DateTime.Now.Day.ToString();
date=year.ToString()+"/"+month.ToString()+"/"+day.ToString()+"";
stringmysql="select*fromUser$whereUserName='"+Login_start._username_only+"'";
DataSetUser=CreatSQL.GetDataSet(mysql);
stu_name=User.Tables[0].Rows[0][4].ToString();
}
C#语言中可以获取系统时间,Ststem.DateTime为系统时间,做一下处理,将时分秒给去除掉即可。
而学生的则是应该放在登录界面中获取到。
学生点击登录后,在Application.LoadLevel("场景名称")代码之前获取到学生的。
将数据库里的Name列获取到即可。
施工工艺实训室设计
从主界面点击各个板块进入到各课程里面,施工工艺实训室流程图见图3-7
图3-7施工工艺设计流程图
点击图3-6中的“施工工艺实训室“进入到此版块的容,这里面的容多少,可以根据需要来进行划分。
此版块设计是分为了几个其它的小版块,里面的容不同,且场景动画也不一样。
在相关设计中,我们由美工提供了一个已经做好的动画模型放入到相对应的场景中。
美工使用3DMAX打包成fbx文件后,我们导入到Unity3D中,在Project视图里生成了对应的prefab文件,我们只需直接将模型拖到下方的Hierarchy视图中,在scene就可以生成相应的3D模型了。
有的模型有动画,而有的没有,所以在开始设定的时候,我们需要在模型的Inspector视图中,找到对应的Animation状态栏,将里面的Animation动画更改为美工提供好的静止的动画,或者将Animation列设置为None。
在界面排版上,我们需要做出相对应的工具栏,每个工具栏都代表着场景中模型的一个动画。
根据需求的多少,就制作出相应多少的工具栏。
点击工具栏中的工具,然后再放入界面中的白色方框中,即可看到界面里相应的动画展示。
然后再点击下一工具栏继续,接着会出现另一个动画展示。
出于人性化的考虑,我们在左下方会给出提示栏,以方便同学不太清楚的地方,可以参考左下方的提示栏了解相关的操作等。
当工具栏里的工具使用完后,即可点击右上方的退出按键,再进入别的场景里进行学习观看。
界面设计方面,首先是需要设计三个方框UIsprite进行判定,UIsprite由NGUI->Create->Sprite创建,一个是放入工具栏,一个是放入白色框,最后一个是鼠标框。
工具栏是对应的图片放入其中,当鼠标点击时,取消掉工具栏里的图片,再将鼠标框里的图片更改为鼠标点击的图片,这个就需要判定一下鼠标点击的图片是哪一个。
然后再将鼠标放入白色框中点击,接着才会出现界面中的相应动画。
同时白色框也需要进行判定,因为具体的工具栏是对应的不同的步骤,只有对应的步骤对上了,才会出现动画。
这样的设计是防止系统出现紊乱以与学生乱点,按照步骤一一点下来即可看完整个动画流程。
代码部分如下。
publicUISpritecursor;
publicUISpriteicon;
publicGameObjectlabel;
publicvoidChangeCursor(){
if(!
gameObject.GetComponent().value){
cursor.atlas=icon.atlas;
cursor.spriteName=icon.spriteName;
icon.enabled=false;
label.SetActive(false);
}else{
cursor.atlas=null;
cursor.spriteName=null;
icon.enabled=true;
label.SetActive(true);
}
}
pu