版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
15.1項目介紹隨著這兩年AR的興起,市面上出現(xiàn)越來越多的AR應(yīng)用,如AR卡片、AR涂涂樂、結(jié)合LBS技術(shù)的精靈寶可夢等。很多大公司也投入到了AR的領(lǐng)域,如蘋果公司的ARKit、谷歌公司的ARCore等,正是有了這些公司,他們把AR技術(shù)進行了封裝,讓開發(fā)者可以很方便地制作自己的AR應(yīng)用。本章將利用EasyARSDK來制作一個簡單的AR應(yīng)用。EasyAR是視辰信息科技(上海)有限公司自主研發(fā)的一款A(yù)R開發(fā)工具包,里面封裝好了AR的接口,直接調(diào)用就可以實現(xiàn)AR功能。本章制作一個掃描圖片,出現(xiàn)小紅軍的模型,可以跟小紅軍進行交互,讓模型做一些動作,如圖15.1所示。返回15.2EasyARSDK介紹15.2.1注冊開發(fā)者賬號注冊EasyARSDK開發(fā)者賬號首先需要訪問EasyAR的官網(wǎng)/,注冊開發(fā)者賬號(制作項目需要),如圖15.2所示。單擊右上角“注冊”按鈕,在彈出界面輸入注冊信息,注冊自己的開發(fā)者賬號,注冊后登錄賬號,如圖15.3所示。15.2.2應(yīng)用授權(quán)使用EasyARSDK,每個應(yīng)用都需要授權(quán),與SDKLicenseKey相關(guān)聯(lián),否則在聯(lián)網(wǎng)的狀態(tài)下是無法使用SDK功能的。所以,每新建一個應(yīng)用都必須授權(quán),步驟如下。下一頁返回15.2EasyARSDK介紹
(1)登錄自己的開發(fā)者賬號。(2)進入開發(fā)者中心界面。(3)單擊“SDK授權(quán)管理”,再單擊“添加SDKlicensekey”按鈕。(4)選擇EasyARSDKBasic免費無水印版本,填好應(yīng)用詳情,都可以根據(jù)自己需要填寫,這里需要注意的是BundleID(IOS)和PackageName(Android),這兩個值需要與Unity中的PackageName一致。上一頁下一頁返回15.2EasyARSDK介紹
15.2.3SDK下載使用下載EasyARSDK,這里使用的是免費的Basic版,使用的是早期的1.3.1的版本,所以這里選擇歷史版本,如圖15.9所示。找到EasyARSDKv1.3.1并下載EasyARSDKv1.3.1,如圖15.10所示,下面還有EasyARSDKv1.3.1UnitySamples,需要的話可以自己下載,里面有很多官方案例,自學(xué)可以參考官方案例來學(xué)習。下載完成后解壓EasyAR_v1.3.1.zip的壓縮包,里面目錄結(jié)構(gòu)如下:安卓、蘋果和Unity這3個平臺的SDK,如圖15.11所示。上一頁下一頁返回15.2EasyARSDK介紹
這里使用的是Unity引擎來開發(fā),所以用到的是Unity目錄下的文件,一個是案例Sample_HelloAR工程,可以直接用Unity打開,另一個是AR的SDK,與AR功能相關(guān)的接口都封裝在里面,需導(dǎo)入Unity里使用。打開Unity,再打開Sample_HelloAR官方案例,Project窗口里HelloAR→Scenes→HelloAR場景。在沒有輸入SDKlicensekey時,AR功能是無法開啟的。把之前官方授權(quán)的App里的SDKlicensekey值復(fù)制到EasyAR_Startup對象上的EasyARBehaviour腳本里。上一頁下一頁返回15.2EasyARSDK介紹
運行游戲,程序會自動調(diào)用電腦上的攝像頭,用攝像頭對準指定圖片,會出現(xiàn)對應(yīng)的模型。15.2.4SDK功能介紹其主要包含兩部分,如圖15.18所示。EasyAR_StartUp:相當于Unity里的主攝像機,AR的算法、攝像頭的開啟關(guān)閉、圖像的識別、模型的跟蹤等都封裝好了,直接把這個預(yù)制體拖到場景里即可。ImageTarget:設(shè)置識別的底圖和模型。它身上綁定了EasyImageTargetBehaviour.cs腳本,這個腳本里實現(xiàn)了AR功能的一些方法,可以在里面實現(xiàn)需要的邏輯。上一頁下一頁返回15.2EasyARSDK介紹
●OnTargetFound:攝像機識別到圖像的回調(diào)方法,這里默認的方法是顯示下面的所有子物體,即3D模型?!馩nTargetLost:攝像機丟失圖片的回調(diào)方法,這里默認的方法是隱藏下面的所有子物體,即3D模型?!馩nTargetLoad:3D模型加載完后回調(diào)的方法。●OnTargetUnload:3D模型卸載后回調(diào)的方法。可以在以上幾個方法里添加業(yè)務(wù)邏輯代碼。ImageTarget對象身上的EasyImageTargetBehaviour組件參數(shù)介紹,如圖15.21所示。上一頁下一頁返回15.2EasyARSDK介紹
Path:識別底圖的路徑,該路徑包含名字,Storage選擇Assets時默認的路徑是StreamingAssets目錄,所以把識別底圖放到StreamingAssets目錄下,Path直接填寫圖片名字加后綴就可以了。Name:識別底圖的名字。ActiveTargetOnStart:是否在程序啟動時就激活,只有處于激活狀態(tài)才會被識別。Storage:資源的路徑。把識別底圖需要顯示的3D模型放在ImageTarget-Image下面,作為它的子物體。上一頁下一頁返回15.2EasyARSDK介紹
這樣設(shè)置后,運行游戲,AR功能可以正常使用,但是這樣底圖是沒有材質(zhì)的,不方便模型與底圖位置關(guān)聯(lián)和綁定。創(chuàng)建一個材質(zhì)球,把材質(zhì)球賦值給ImageTarget-Image,新建材質(zhì)球。把材質(zhì)球的貼圖換成識別的底圖。把材質(zhì)球賦值給ImageTarget-Image對象身上的MeshRenderer組件。賦值完后效果如圖15.27所示,底圖也是顯示的。上一頁返回15.3AR小紅軍項目15.3.1項目準備工作新建一個Unity項目,按Ctrl+S組合鍵先保存場景,如圖15.28所示。導(dǎo)入EasyARSDK。選擇Assets→ImportPackage菜單命令,選擇從EasyAR官網(wǎng)下載的SDK,放在前面下載的壓縮包里面,如圖15.29所示。導(dǎo)入后目錄結(jié)構(gòu)如圖15.30所示。把Hiererchy窗口中的主攝像機MainCamera和DirectionalLight刪除,因為使用的是EasyARSDK里面的攝像頭作為場景的主攝像機。然后把Easy_AR_Startup和ImageTarget拖到Hierarchy窗口里(添加到場景中)。下一頁返回15.3AR小紅軍項目
選中EasyAR_Startup對象,右邊的Inspector屬性口,把應(yīng)用授權(quán)的值賦給它(只有授權(quán)后的應(yīng)用才能使用SDK功能)。選中ImageTarget對象,從右邊的屬性窗口可以看到它身上綁的是ImageTargetBehaviour.cs腳本,該腳本是沒有實現(xiàn)AR識別顯示、隱藏的功能。可以自己寫代碼實現(xiàn)AR功能需要的幾個接口,也可以從其官方的案例工程里直接把EasyImageTargetBehaviour.cs腳本拖到自己的項目里,該腳本里的接口都寫好了,只需往里面添加邏輯代碼即可。上一頁下一頁返回15.3AR小紅軍項目
這里把Sample_HelloAR項目里的EasyImageTargetBehaviour.cs腳本復(fù)制到工程里,同時把它掛到ImageTarget身上的ImageTargetBehaviour.cs腳本移除,添加EasyImageTargetBehaviour.cs。在Project窗口新建一個文件夾,重命名為StreamingAssets。注意命名不能錯。把身份證背面圖idback.jpg放在StreamingAssets目錄下,必須把識別的底圖放到該目錄里才能被識別。再新建一個文件夾,重命名為Texture,把idback.jpg復(fù)制一份,放到該文件夾下。新建一個材質(zhì)球,把材質(zhì)球貼圖換成idback.jpg,如圖15.37所示,把材質(zhì)球賦值給ImageTarget,同時設(shè)置EasyImageTargetBehaviour組件身上的屬性。上一頁下一頁返回15.3AR小紅軍項目
在ImageTarget下面添加一個Cube作為它的子物體,作為攝像機識別到圖像時顯示的模型,稍微調(diào)整一下Cube的大小和位置。運行游戲,測試EasyAR功能。攝像頭掃描到idback.jpg圖片時會出現(xiàn)Cube模型,說明EasyARSDK運行正常。15.3.2導(dǎo)入小紅軍模型選擇Assets→ImportPackage菜單命令,選擇資源目錄下的Army.unitypackage包,里面包含小紅軍模型和一整套動作,如圖15.40和圖15.41所示。上一頁下一頁返回15.3AR小紅軍項目
把ImageTarget對象下的子物體Cube刪除,新建一個空對象CreateEmpty,重命名Child,把Child的Transform組件重置,把小紅軍模型01_Idle拖到Child上面,讓它作為Child的子物體,適當調(diào)整01_Idle的大小和位置,讓模型站在識別底圖的中心,使模型大小適中,如圖15.42所示,現(xiàn)在運行游戲,攝像頭掃到識別底圖出現(xiàn)的模型就是小紅軍了。15.3.3代碼實現(xiàn)交互上一頁下一頁返回15.3AR小紅軍項目
AR功能正常,小紅軍可以正常地顯示和隱藏,接下來添加一些簡單交互,主要是在Android手機上運行的,所以這邊的交互都是基于Android的觸屏操作,這里先介紹單根手指滑動實現(xiàn)旋轉(zhuǎn)模型、兩根手指拉近拉遠實現(xiàn)縮放模型。使用的是Unity的輸入管理類Input,在Child對象身上添加一個C#腳本Control.cs,代碼如圖15.43所示。15.3.4小紅軍動畫控制實現(xiàn)旋轉(zhuǎn)和縮放功能后,再來添加動畫控制功能。動作美工已經(jīng)做好了,在前面導(dǎo)入的資源包里都有,這里使用的是Unity的動畫組件Animator和動畫控制器AnimatorControl來控制動畫狀態(tài)機的切換。首先介紹怎么使用動畫控制器。先往小紅軍對象身上添加Animator動畫組件(動畫的相關(guān)API需要該組件來調(diào)用),如圖15.46所示。上一頁下一頁返回15.3AR小紅軍項目
Animator組件上有幾個屬性需要用到。Controller:動畫控制器(狀態(tài)機),后面創(chuàng)建狀態(tài)機時再說明。Avatar:模型結(jié)構(gòu)(相當于骨骼),這里需要選擇小紅軍的Avatar,只有選擇了Avatar模型才能做動畫表現(xiàn)。ApplyRootMotion:是否使用根動畫,有些動畫本身是帶位移的,如果需要動畫中位移,可以勾選此復(fù)選框。在Project窗口,單擊鼠標右鍵,選擇快捷菜單中的Create→AnimatorControl命令,創(chuàng)建一個動畫控制器,來管理小紅軍的一整套動畫狀態(tài),重命名Army。上一頁下一頁返回15.3AR小紅軍項目
雙擊Army動畫控制器,進入動畫控制器界面。動畫的入口Entry默認會連接第一個拖進去的動畫,即游戲一運行就會從Entry過渡到Idel,小紅軍執(zhí)行站立Idel動作。把其他動作也拖到動畫控制器窗口,并連接好動畫之間的過渡。動畫之間的過渡方法:需要選中一個動畫,如Idel,單擊鼠標右鍵,選擇快捷菜單中的MakeTransition命令,然后把線連到badao動作。把Project窗口中的動畫片段拖到動畫控制器管理窗口中,如圖15.50和圖15.51所示。上一頁下一頁返回15.3AR小紅軍項目
動畫的入口Entry默認會連接第一個拖進去的動畫,即游戲一運行就會從Entry過渡到Idel,小紅軍執(zhí)行站立Idel動作。把其他動作也拖到動畫控制器窗口,并連接好動畫之間的過渡。動畫之間的過渡方法:需要選中一個動畫,如Idel,單擊鼠標右鍵,選擇快捷菜單中的MakeTransition命令,然后把線連到badao動作。兩個動畫之間的過渡需要設(shè)置條件,沒有條件限制會自動播放,所以需要給動畫間的過渡添加條件。動畫控制器窗口的左邊有一個Parameters界面,可在這里添加條件,單擊“+”號。過渡條件的類型有4種,這里創(chuàng)建一個Trigger類型的過渡條件,給條件參數(shù)重命名為play,如圖15.56所示,讓它作為從Idel站立動作切換到badao動作的過渡條件(后面的動作切換會用到這個條件上一頁下一頁返回15.3AR小紅軍項目
創(chuàng)建完條件參數(shù)后,來設(shè)置條件。用鼠標選中兩個動畫間的過渡線,這里是Idel和badao之間的過渡線,右邊的Inspector屬性窗口會有兩個動畫過渡的一些信息。單擊“+”號,選擇創(chuàng)建的條件參數(shù)。這樣在代碼里就可以通過animator.SetTrigger(“play”)來切換動畫,play是上面設(shè)置的過渡條件。上一頁下一頁返回15.3AR小紅軍項目
按照上面的做法,把其他動畫也拖到動畫控制器窗口,需要手動切換動畫的,過渡條件都設(shè)置為play,有些動畫間是不需要設(shè)置條件限制的,如badao動作過渡到badaoidel,拔刀動作是自動過到拔刀站立動作的,不需要設(shè)置條件,如圖15.59所示。設(shè)置好動畫狀態(tài)機后,把動畫功能添加到代碼中。先把動畫控制器Army拖曳到小紅軍對象身上的Animator組件中,如圖15.60所示。動畫控制代碼寫在前面綁在Child上面的Control.cs腳本中。首先需要往小紅軍模型身上添加一個碰撞器,用來檢測射線(判斷手指是否觸摸模型),調(diào)整碰撞器的大小和位置,讓它包圍整個模型,如圖15.61所示。上一頁下一頁返回15.3AR小紅軍項目
在Awake方法里,查找小紅軍身上的Animator組件。在Update方法里,通過觸摸屏幕發(fā)送射線,檢測射線是否碰到模型,射線碰到模型再觸發(fā)動畫切換。15.3.5添加音效動作添加完后,再來添加音效。把音效資源music拖到Unity的Project窗口,如圖15.64所示。在Child的子物體01_Idel身上添加一個AudioSource音頻組件,把“PlayOnAwake”勾選去掉,播放音效在代碼里控制。上一頁下一頁返回15.3AR小紅軍項目
這里使用在動畫的某一幀中插入播放聲音的事件,所以在01_Idel身上創(chuàng)建一個腳本AudioControl.cs控制音效的播放(注意:要在動畫的某一幀中插入事件,方法腳本和Animator必須綁定在同一個對象身上,否則識別不到方法)。定義一個數(shù)組,用來存放音效的資源文件,在Awake方法里獲取到聲音組件AudioSource。給audioClip賦值,在Unity界面共有8個音效資源,所以把audioClip的大小設(shè)置為8,把音效資源拖曳到AudioClip?;氐紸udioControl腳本,寫一個公有的方法PlayAudio讓外部可以調(diào)用,參數(shù)index表示要播放哪個音效,使用audioSource.clip切換音效資源、audioSource.Play播放音效。上一頁下一頁返回15.3AR小紅軍項目
接著需要在動畫的某一幀插入PlayAudio方法來播放音效,回到動畫控制器窗口,雙擊其中的某個動畫。例如,在拔刀動作時播放02這個拔刀的音效,所以雙擊拔刀動畫,右邊的Inspector屬性窗口有該動畫的相關(guān)屬性,其中有一個Events。單擊添加事件,可以在某一幀中添加一個事件,調(diào)用自己寫的方法,這里調(diào)用的是前面寫的PlayAudio,上一頁下一頁返回15.3AR小紅軍項目
下面的幾個是參數(shù),方法里定義的index是int類型的,所以填0,播放audioSource數(shù)組里的第0個音效,即拔刀的音效。如圖15.70所示,也可以拖動藍色的小矩形來調(diào)整事件的插入位置。其他動作添加音效的方法與此類似,這里就不一一演示了。添加完音效后,保存場景,發(fā)布成Android的APK包,安裝到手機上就可以測試了。測試效果如圖15.71和圖15.72所示。上一頁返回15.4AR小紅軍脫卡操作基本功能已經(jīng)實現(xiàn)了,下面做些調(diào)整,加一個脫卡功能。當攝像頭離開識別圖后,模型不會消失,會移動到屏幕的中心。實現(xiàn)的原理如下。新建一個攝像機,當識別圖丟失時,讓該相機來渲染模型,EasyARSDK的相機功能關(guān)閉,當重新識別到圖片時,再恢復(fù)用EasyARSDK的相機來渲染。(1)在場景里新建一個相機,重命名為LostCamera,如圖15.73所示,選中該相機,在右邊的Inspector屬性窗口新增一個Layer層,命名為Lost,LostCamera只渲染該層,當掃描的識別圖丟失后,會把小紅軍的層改為Lost,只讓該相機渲染。下一頁返回15.4AR小紅軍脫卡操作
修改相機的屬性。ClearFlags:Depthonly;CullingMask:Lost(只渲染Lost層)。(2)新建一個空對象,重命名為LostTrack,把所屬層級改為Lost,當識別圖丟失后,該空對象用來存放小紅軍模型。把ImageTarget的子物體Child拖到LostTrack對象下面,改一下Child的層級,默認是default,改成Lost。調(diào)整LostCamera和LostTrack的位置,讓LostCamera可以渲染到整個小紅軍模型。上一頁下一頁返回15.4AR小紅軍脫卡操作
在Awake方法里找到要用到的對象,把Child和ImageTarget通過拖曳的方式賦值給Child和ImageTarget。下面實現(xiàn)3個方法,代碼如圖15.85所示。①識別圖丟失操作。因為射線是主攝像機發(fā)出的,所以當識別圖丟失時,把EasyAR的相機tag設(shè)為“Untagged”,把lostCamera的tag設(shè)為“MainCamera”,這樣當識別圖丟失時lostCamera可以發(fā)射射線,實現(xiàn)交互;把Child對象的父節(jié)點設(shè)置為LostTrack,改變Child的所屬層級,改為Lost層(8),同時把Child對象的位置、縮放、旋轉(zhuǎn)重置。上一頁下一頁返回15.4AR小紅軍脫卡操作
②重新識別到操作。與上面的識別圖丟失操作相反,把EasyAR的相機tag設(shè)置為“MainCamera”,把lostCamera的tag設(shè)置為“Untagged”,把Child對象的父節(jié)點設(shè)置為ImageTarget,改變Child的所屬層級為default層(0),同時把Child對象的位置、縮放、旋轉(zhuǎn)重置。③更改對象所屬層。這里使用的是遞歸的方法,改變對象及其所有子物體的層級關(guān)系。前面曾經(jīng)講過,EasyImageTargetBehaviour.cs腳本里EasyARSDK封裝好了幾個回調(diào)的方法,即OnTargetFound(識別圖識別回調(diào))、OnTargetLost(識別圖丟失回調(diào))。所以只要在這兩個方法里調(diào)用上面實現(xiàn)的識別圖丟失和識別的方法即可,如圖15.86所示。上一頁下一頁返回15.4AR小紅軍脫卡操作
首先在Awake方法里找到LostTrack腳本組件,如圖15.87所示。然后在OnTargetFound和OnTargetLost方法里調(diào)用LostTrack里的方法,同時當識別圖丟失時,模型不能被隱藏,所以在OnTargetLost方法里把HideObjects(Transform)方法注釋掉,如圖15.88所示。最后在代碼里添加一個退出功能,當用戶按手機上的返回鍵時,可以退出該App,這里把退出的代碼放到LostTrack.cs腳本的Update方法里,如圖15.89所示。上一頁下一頁返回15.4AR小紅軍脫卡操作
至此項目算是完成了,保存場景,出AndriodAPK包測試一下識別圖丟失的脫卡功能。出Andriod包時有兩個地方需要注意。勾選掉“AutoGraphicsAPI”,GraphicsAPIs選擇OpenGLES2,這是EasyARSDK支持的圖形處理AP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼筋混凝土排水溝施工方案設(shè)計
- 2026湖南長沙市一中株洲實驗學(xué)校公開招聘編外合同制教師筆試備考試題及答案解析
- 2026年萍鄉(xiāng)市規(guī)劃勘察設(shè)計院有限責任公司招聘外聘人員3人筆試參考題庫及答案解析
- 2026年上半年安徽國控投資有限公司及所屬企業(yè)公開招聘筆試參考題庫及答案解析
- 2025河南平頂山衡水卓越學(xué)校誠聘筆試模擬試題及答案解析
- 2026年西安市浐灞第十小學(xué)教師招聘筆試模擬試題及答案解析
- 2026年杭州建德市大同鎮(zhèn)中心衛(wèi)生院招聘編外人員3人筆試參考題庫及答案解析
- 2026甘肅天水市科技館志愿者招募筆試參考題庫及答案解析
- 2026重慶雙福農(nóng)產(chǎn)品批發(fā)市場有限公司招聘3人筆試備考試題及答案解析
- 2026年春季廣東廣州市天河區(qū)新昌學(xué)校招聘中小學(xué)數(shù)學(xué)、體育教師5人筆試備考題庫及答案解析
- FS1120設(shè)備安裝步驟與調(diào)試手冊
- 2025年消防文員筆試題庫及答案(可下載)
- 華為GTM與IPMS流程介紹及實操案例
- 《非醫(yī)療生殖健康保健機構(gòu)服務(wù)管理 規(guī)范》
- 供應(yīng)鏈年終總結(jié)報告
- 2025年高考數(shù)學(xué)真題分類匯編專題10 直線與圓及圓錐曲線(全國)(解析版)
- 建筑工程拆除工程拆除物的清理方案及措施
- 全媒體矩陣宣傳推廣服務(wù)項目方案投標文件(技術(shù)方案)
- 2025年中國私募基金白皮書
- 礦山安全生產(chǎn)責任目標分解方案
- 2025秋季學(xué)期國開電大法律事務(wù)專科《刑法學(xué)(2)》期末紙質(zhì)考試填空題題庫珍藏版
評論
0/150
提交評論