虚拟现实与增强现实开发实战 课件 第1、2章 AR奇石、AR中草药_第1页
虚拟现实与增强现实开发实战 课件 第1、2章 AR奇石、AR中草药_第2页
虚拟现实与增强现实开发实战 课件 第1、2章 AR奇石、AR中草药_第3页
虚拟现实与增强现实开发实战 课件 第1、2章 AR奇石、AR中草药_第4页
虚拟现实与增强现实开发实战 课件 第1、2章 AR奇石、AR中草药_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AR奇石案例Adesignercanusedefaulttexttosimulatewhattextwouldlooklike.Itlooksevenbetterwithyouusingthistext.目录content01案例简介02环境配置03功能开发04重点难点PART01案例介绍

AR奇石案例本案例是利用Unity增强现实技术实现的以“奇石”为主题的图像识别,通过学习制作本案例,使开发者了解我国的奇石文化,增加对传统文化的认知,丰富民族文化的思想和内涵。用户可以通过手机摄像机识别奇石图像,获取奇石模型,也可以通过手指触屏来实现奇石的缩放、旋转等功能。PART02环境配置vuforia首先需要注册一个Vuforia账号,建议使用常用qq邮箱注册登录以后在Develop界面点击“AddDatabase”创建一个数据库点击“AddTarget”增加图片数据。最后点击“DownloadDatabase”下载数据库Vuforia是创建增强现实应用程序的软件平台。开发人员可以轻松地将高级计算机视觉功能添加到任何应用程序,使其能够识别图像和对象,并与现实世界中的空间进行交互。安装vuforia环境0102打开unityHub,在安装界面,选择对应版本的编辑器,右侧添加模块,勾选vuforia,继续安装。安装vuforia打开unity,点击菜单栏GameObject选项栏,看里面是否有vuforia选项,如果有,说明已经安装。查看自己是否已安装vuforia5%70%PART03功能开发1.UI界面与交互创建Button菜单栏GameObject-UI中选择Button,调整其位置与大小,添加image,找到简介按钮,将其拖曳至SourceImage处制作简介面板创建一个Image,修改其大小及位置,找到背景图片,将其拖曳至SourceImage处1.UI界面与交互创建一个脚本,代码如下声明两个私有变量privateButtonjianjie;privateImagexiangqing;以寻找名字的方法,从场景中获取简介按钮和详情图像jianjie=transform.Find("jianjie").GetComponent<Button>();xiangqing=transform.Find("xiangqing").GetComponent<Image>();监听简介按钮事件,判断是否点击按钮,调整详情的缩放大小transform.localScale:转换相对于父对象的比例xiangqing.transform.localScale=Vector3.one;2.动画功能制作识别封面图像出现书翻页动画。1.在GameObject-Vuforia中选择Image,创建Images对象,用于存放识别图像。2.Database和ImageTarget分别选择之前设置好的数据库“cover”和图片对象“fengmian”2.动画功能创建一个脚本,代码如下定义一个放置动画的公有变量publicGameObjectmodelPrefab;选择book动画预制体,将其拖曳给Hierarchy面板中的fengmian对象和fengmian挂载的脚本的变量ModelPrefab处3.特效功能制作一个落叶的特效打开MyDefaultTrackableEventHandler.cs脚本,编写如下代码publicGameObjecttexiaoPrefab;//定义特效选择特效预制体CFXM3_FallingLeaves,将其拖曳至fengmian对象的脚本变量TexiaoPrefab处。4.音频播放功能0102选择fengmian对象,在其属性面板下添加音效组件。选择音效TheFadingStories-不再年轻的村庄,将其拖曳至音效组件处4.音频播放功能打开脚本MyDefaultTrackableEventHandler,代码如下定义一个私有变量,用于存放音频privateAudioSourceaudio;继承项目中的音频组件audio=this.GetComponent<AudioSource>();识别到图像时播放背景音效if(!audio.isPlaying)//判断音频是否播放{audio.Play();//播放音频}5.生成与销毁功能010203找到预制体,拖拽到脚本变量ModelPrefab处,并隐藏模型制作第一张奇石识别图像,选择fengmian对象,Ctrl+D复制一份修改huanglashi对象属性面板里的数据库和识别图片,Database选择stone,ImageTraget选择huangla2,并且移除音频组件AudioSource。5.生成与销毁功能打开脚本MyDefaultTrackableEventHandler,代码如下定义一个UI变量,用于放置UI预制体publicGameObjectthisui;在代码的最前面需对使用UI进行声明usingUnityEngine.UI;识别到图片时生成奇石模型。(Instantiate:复制物体及其位置和方向)Quaternion(四元数):用于角度的旋转。Euler函数:返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度GameObjectmodel=GameObject.Instantiate(modelPrefab,transform.position-newVector3(0f,0f,0f),transform.rotation);model.transform.

=this.transform;model.transform.rotation=Quaternion.Euler(0,-180,0);5.生成与销毁功能生成特效GameObjecttexiao=GameObject.Instantiate(texiaoPrefab,transform.position,Quaternion.identity);texiao.transform.parent=this.transform;生成UIGameObjectui=GameObject.Instantiate(thisui);ui.transform.parent=this.transform;未识别到图片时销毁已生成的模型。(Destroy:销毁游戏物体。Find可以直接查找组件)Destroy(GameObject.Find("book(Clone)"));Destroy(GameObject.Find("huangla(Clone)"));Destroy(GameObject.Find("laibinshi(Clone)"));Destroy(GameObject.Find("dahua(Clone)"));Destroy(GameObject.Find("caitao(Clone)"));6.旋转功能创建一个新脚本,命名为Rotate,代码如下定义两个变量,用于控制物体旋转的速度floatxSpeed=150f;//水平速度floatySpeed=50f;//垂直速度先判断是否触摸了屏幕,再判断是几个手指触摸。Input.GetMouseButton(0)表示鼠标左键按下。Input.touchCount==1表示单点触摸if(Input.GetMouseButton(0)){if(Input.touchCount==1)6.旋转功能判断手指是否移动及移动方向。Input.GetTouch(0).phase==TouchPhase.Moved表示移动触摸if(Input.GetTouch(0).phase==TouchPhase.Moved){//以手指横向移动的值绕世界坐标的Y轴旋转transform.Rotate(Vector3.up*Input.GetAxis("MouseX")*xSpeed*Time.deltaTime,

Space.World);//以手指纵向移动的值绕世界坐标的X轴旋转transform.Rotate(Vector3.left*Input.GetAxis("MouseY")*ySpeed*Time.deltaTime,

Space.World);7.缩放功能通过两个手指的手势实现模型的放大与缩小原理通过判断两个手指间的距离变化来实现,若距离变大,则放大模型,若距离变小,则缩小模型。可以使用两点间的距离公式√[(x1-x2)²+(y1-y2)²]来计算7.缩放功能创建一个新脚本,命名为EnLarge,代码如下首先判断手势是放大还是缩小bool:返回true或falseMathf.Sqrt:返回一个数的平方根length1表示初始距离。length2表示手指变化后的距离。通过两者比较,判断手势(oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y)

:[(x1-x2)²+(y1-y2)²]boolisEnLarge(Vector2oP1,Vector2oP2,Vector2nP1,Vector2nP2){floatlength1=Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));floatlength2=Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));if(length1<length2){returntrue;}else{returnfalse;}7.缩放功能定义两个Vector2类型的变量,记录两个手指初始的位置Vector2oldPos1;Vector2oldPos2;首先判断是否有两个手指(Input.touchCount:触摸数量)if(Input.touchCount==2)再判断手指是否在移动if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)

定义两个Vector2类型的变量,记录两个手指移动后的位置Vector2temPos1=Input.GetTouch(0).position;Vector2temPos2=Input.GetTouch(1).position;7.缩放功能调用isEnLarge,将数据传给形参,比较length1和length2,实现放大或缩小。if(isEnLarge(oldPos1,oldPos2,temPos1,temPos2)){floatoldScale=transform.localScale.x;//原始大小floatnewScalse=oldScale*1.025f;//放大的倍数transform.localScale=newVector3(newScalse,newScalse,newScalse);//整体放大}else{floatoldScale=transform.localScale.x;floatnewScalse=oldScale/1.025f;//缩小的倍数transform.localScale=newVector3(newScalse,newScalse,newScalse);//整体缩小8.案例发布在菜单栏中点击File-BuildSettings,点击PlayerSettings在PC端勾选VuforiaAugmentedRealit,最后点击Build即可导出app。PART04重点难点难点重点1学会使用vuforia,了解vuforia的功能。vuforia识别快,功能也较多,他除了可以识别图片,还可以识别文本等,建议大家去学习。重点2:在功能开发的时,一定要理清代码的逻辑,例如在实现缩放功能时,先写判断手势的方法,然后在实现缩放时在调用。难点难点1:在实现模型生成的时候,使Instantiate函数时,要计算好模型生成的位置及大小,难点2:在实现缩放功能的时候,要判断是几个手指的触碰,如何判断是放大还是缩小,以及利用数学公式去计算距离。为梦想不止步Adesignercanusedefaulttexttosimulatewhattextwouldlooklike.Itlooksevenbetterwithyouusingthistext.梧州学院AR中草药功能实现——AR手册目录content01UI设计02按钮交互03音频播放功能04打包发布PART01UI设计UI设计首先导入我们准备好的资源包里面的图像资源包中包含了我们所要使用到的美术资源UI设计我们新建Canvas,并在Canvas里面添加图片image,然后给Image改好名字再将我们的Canvas里的图片替换成我们的美术资源并且在界面中摆放好位置主要场景UI开始界面UIUI设计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论