虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)開(kāi)發(fā)實(shí)戰(zhàn) 課件 第1章 AR奇石_第1頁(yè)
虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)開(kāi)發(fā)實(shí)戰(zhàn) 課件 第1章 AR奇石_第2頁(yè)
虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)開(kāi)發(fā)實(shí)戰(zhàn) 課件 第1章 AR奇石_第3頁(yè)
虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)開(kāi)發(fā)實(shí)戰(zhàn) 課件 第1章 AR奇石_第4頁(yè)
虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)開(kāi)發(fā)實(shí)戰(zhàn) 課件 第1章 AR奇石_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

AR奇石案例Adesignercanusedefaulttexttosimulatewhattextwouldlooklike.Itlooksevenbetterwithyouusingthistext.目錄content01案例簡(jiǎn)介02環(huán)境配置03功能開(kāi)發(fā)04重點(diǎn)難點(diǎn)PART01案例介紹

AR奇石案例本案例是利用Unity增強(qiáng)現(xiàn)實(shí)技術(shù)實(shí)現(xiàn)的以“奇石”為主題的圖像識(shí)別,通過(guò)學(xué)習(xí)制作本案例,使開(kāi)發(fā)者了解我國(guó)的奇石文化,增加對(duì)傳統(tǒng)文化的認(rèn)知,豐富民族文化的思想和內(nèi)涵。用戶可以通過(guò)手機(jī)攝像機(jī)識(shí)別奇石圖像,獲取奇石模型,也可以通過(guò)手指觸屏來(lái)實(shí)現(xiàn)奇石的縮放、旋轉(zhuǎn)等功能。PART02環(huán)境配置vuforia首先需要注冊(cè)一個(gè)Vuforia賬號(hào),建議使用常用qq郵箱注冊(cè)登錄以后在Develop界面點(diǎn)擊“AddDatabase”創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)點(diǎn)擊“AddTarget”增加圖片數(shù)據(jù)。最后點(diǎn)擊“DownloadDatabase”下載數(shù)據(jù)庫(kù)Vuforia是創(chuàng)建增強(qiáng)現(xiàn)實(shí)應(yīng)用程序的軟件平臺(tái)。開(kāi)發(fā)人員可以輕松地將高級(jí)計(jì)算機(jī)視覺(jué)功能添加到任何應(yīng)用程序,使其能夠識(shí)別圖像和對(duì)象,并與現(xiàn)實(shí)世界中的空間進(jìn)行交互。安裝vuforia環(huán)境0102打開(kāi)unityHub,在安裝界面,選擇對(duì)應(yīng)版本的編輯器,右側(cè)添加模塊,勾選vuforia,繼續(xù)安裝。安裝vuforia打開(kāi)unity,點(diǎn)擊菜單欄GameObject選項(xiàng)欄,看里面是否有vuforia選項(xiàng),如果有,說(shuō)明已經(jīng)安裝。查看自己是否已安裝vuforia5%70%PART03功能開(kāi)發(fā)1.UI界面與交互創(chuàng)建Button菜單欄GameObject-UI中選擇Button,調(diào)整其位置與大小,添加image,找到簡(jiǎn)介按鈕,將其拖曳至SourceImage處制作簡(jiǎn)介面板創(chuàng)建一個(gè)Image,修改其大小及位置,找到背景圖片,將其拖曳至SourceImage處1.UI界面與交互創(chuàng)建一個(gè)腳本,代碼如下聲明兩個(gè)私有變量privateButtonjianjie;privateImagexiangqing;以尋找名字的方法,從場(chǎng)景中獲取簡(jiǎn)介按鈕和詳情圖像jianjie=transform.Find("jianjie").GetComponent<Button>();xiangqing=transform.Find("xiangqing").GetComponent<Image>();監(jiān)聽(tīng)簡(jiǎn)介按鈕事件,判斷是否點(diǎn)擊按鈕,調(diào)整詳情的縮放大小transform.localScale:轉(zhuǎn)換相對(duì)于父對(duì)象的比例xiangqing.transform.localScale=Vector3.one;2.動(dòng)畫功能制作識(shí)別封面圖像出現(xiàn)書翻頁(yè)動(dòng)畫。1.在GameObject-Vuforia中選擇Image,創(chuàng)建Images對(duì)象,用于存放識(shí)別圖像。2.Database和ImageTarget分別選擇之前設(shè)置好的數(shù)據(jù)庫(kù)“cover”和圖片對(duì)象“fengmian”2.動(dòng)畫功能創(chuàng)建一個(gè)腳本,代碼如下定義一個(gè)放置動(dòng)畫的公有變量publicGameObjectmodelPrefab;選擇book動(dòng)畫預(yù)制體,將其拖曳給Hierarchy面板中的fengmian對(duì)象和fengmian掛載的腳本的變量ModelPrefab處3.特效功能制作一個(gè)落葉的特效打開(kāi)MyDefaultTrackableEventHandler.cs腳本,編寫如下代碼publicGameObjecttexiaoPrefab;//定義特效選擇特效預(yù)制體CFXM3_FallingLeaves,將其拖曳至fengmian對(duì)象的腳本變量TexiaoPrefab處。4.音頻播放功能0102選擇fengmian對(duì)象,在其屬性面板下添加音效組件。選擇音效TheFadingStories-不再年輕的村莊,將其拖曳至音效組件處4.音頻播放功能打開(kāi)腳本MyDefaultTrackableEventHandler,代碼如下定義一個(gè)私有變量,用于存放音頻privateAudioSourceaudio;繼承項(xiàng)目中的音頻組件audio=this.GetComponent<AudioSource>();識(shí)別到圖像時(shí)播放背景音效if(!audio.isPlaying)//判斷音頻是否播放{audio.Play();//播放音頻}5.生成與銷毀功能010203找到預(yù)制體,拖拽到腳本變量ModelPrefab處,并隱藏模型制作第一張奇石識(shí)別圖像,選擇fengmian對(duì)象,Ctrl+D復(fù)制一份修改huanglashi對(duì)象屬性面板里的數(shù)據(jù)庫(kù)和識(shí)別圖片,Database選擇stone,ImageTraget選擇huangla2,并且移除音頻組件AudioSource。5.生成與銷毀功能打開(kāi)腳本MyDefaultTrackableEventHandler,代碼如下定義一個(gè)UI變量,用于放置UI預(yù)制體publicGameObjectthisui;在代碼的最前面需對(duì)使用UI進(jìn)行聲明usingUnityEngine.UI;識(shí)別到圖片時(shí)生成奇石模型。(Instantiate:復(fù)制物體及其位置和方向)Quaternion(四元數(shù)):用于角度的旋轉(zhuǎn)。Euler函數(shù):返回一個(gè)旋轉(zhuǎn)角度,繞z軸旋轉(zhuǎn)z度,繞x軸旋轉(zhuǎn)x度,繞y軸旋轉(zhuǎn)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;未識(shí)別到圖片時(shí)銷毀已生成的模型。(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.旋轉(zhuǎn)功能創(chuàng)建一個(gè)新腳本,命名為Rotate,代碼如下定義兩個(gè)變量,用于控制物體旋轉(zhuǎn)的速度f(wàn)loatxSpeed=150f;//水平速度f(wàn)loatySpeed=50f;//垂直速度先判斷是否觸摸了屏幕,再判斷是幾個(gè)手指觸摸。Input.GetMouseButton(0)表示鼠標(biāo)左鍵按下。Input.touchCount==1表示單點(diǎn)觸摸if(Input.GetMouseButton(0)){if(Input.touchCount==1)6.旋轉(zhuǎn)功能判斷手指是否移動(dòng)及移動(dòng)方向。Input.GetTouch(0).phase==TouchPhase.Moved表示移動(dòng)觸摸if(Input.GetTouch(0).phase==TouchPhase.Moved){//以手指橫向移動(dòng)的值繞世界坐標(biāo)的Y軸旋轉(zhuǎn)transform.Rotate(Vector3.up*Input.GetAxis("MouseX")*xSpeed*Time.deltaTime,

Space.World);//以手指縱向移動(dòng)的值繞世界坐標(biāo)的X軸旋轉(zhuǎn)transform.Rotate(Vector3.left*Input.GetAxis("MouseY")*ySpeed*Time.deltaTime,

Space.World);7.縮放功能通過(guò)兩個(gè)手指的手勢(shì)實(shí)現(xiàn)模型的放大與縮小原理通過(guò)判斷兩個(gè)手指間的距離變化來(lái)實(shí)現(xiàn),若距離變大,則放大模型,若距離變小,則縮小模型??梢允褂脙牲c(diǎn)間的距離公式√[(x1-x2)2+(y1-y2)2]來(lái)計(jì)算7.縮放功能創(chuàng)建一個(gè)新腳本,命名為EnLarge,代碼如下首先判斷手勢(shì)是放大還是縮小bool:返回true或falseMathf.Sqrt:返回一個(gè)數(shù)的平方根length1表示初始距離。length2表示手指變化后的距離。通過(guò)兩者比較,判斷手勢(shì)(oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y)

:[(x1-x2)2+(y1-y2)2]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.縮放功能定義兩個(gè)Vector2類型的變量,記錄兩個(gè)手指初始的位置Vector2oldPos1;Vector2oldPos2;首先判斷是否有兩個(gè)手指(Input.touchCount:觸摸數(shù)量)if(Input.touchCount==2)再判斷手指是否在移動(dòng)if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)

定義兩個(gè)Vector2類型的變量,記錄兩個(gè)手指移動(dòng)后的位置Vector2temPos1=Input.GetTouch(0).position;Vector2temPos2=Input.GetTouch(1).position;7.縮放功能調(diào)用isEnLarge,將數(shù)據(jù)傳給形參,比較length1和length2,實(shí)現(xiàn)放大或縮小。if(isEnLarge(oldPos1,oldPos2,temPos1,temPos2)){floatoldScale=transform.localScale.x;//原始大小floatnewScalse=oldScale*1.025f;//放大的倍數(shù)transform.localScale=newVector3(newScalse,newScalse,newScalse);//整體放大}else{floatoldScale=transform.localScale.x;floatnewScalse=oldScale/1.025f;//縮小的倍數(shù)transform.localScale=newVector3(newScalse,newScalse,newScalse);//整體縮小8.案例發(fā)布在菜單欄中點(diǎn)擊File-BuildSettings,點(diǎn)擊PlayerSettings在PC端勾選VuforiaAugmentedRealit,最后點(diǎn)擊Build即可導(dǎo)出app。PART04重點(diǎn)難點(diǎn)難點(diǎn)重點(diǎn)1學(xué)會(huì)使用vuforia,了解vuforia的功能。vuforia識(shí)別快,功能也較多,他除了可以識(shí)別圖片,還可以識(shí)別文本等,建議大家去學(xué)習(xí)。重點(diǎn)2:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論