EasyAR SDK在unity中的簡單配置及構建一個簡單場景。


首先打開EasyAR的官方網站http://www.easyar.cn/index.html,注冊登陸之后,打開首頁的開發頁面。

下載sdk和Unity Samples。

創建一個unity3d工程NewAR,導入sdk解壓目錄中的EasyAR.unitypackage。

接下來回到EasyAR的官方網站,進入開發頁面,點擊創建應用。輸入應用程序名稱及包名。

 

就如圖所示生成了應用的key。

 

回到unity,創建一個新的場景start並保存,刪除場景中的MainCamera。打開file->Build Settings,添加當前場景,並進入android發布的Player Settings。將Other Settings->Identification->Bundle Identifier一欄的包名改為我們在網站上注冊時填寫的包名。同時將Other Settings->Rendering的Auto Graphics API的勾取消,刪除OpenGLES3.0.

 

之后就可以開始正式編輯了。首先向場景中拖入EasyAR->Prefab目錄下的EasyAR.prefab與ImageTarget.prefab。之后開始我們的腳本編輯工作。創建MyEasyARBehaviour.cs腳本,這個腳本的主要功能為初始化key並對ImageTarget的載入做出相應的響應。

 1 using UnityEngine;  2 
 3 namespace EasyAR  4 {  5 
 6     public class MyEasyARBehaviour : MonoBehaviour, ITargetEventHandler  7  {  8         [TextArea(1, 10)]//為key在unity編輯面板的最小行數及最大行數設定
 9         public string Key;//輸入的key
10 
11         private void Awake() 12  { 13           
14             ARBuilder.Instance.InitializeEasyAR(Key);//用key去初始化EasyAR
15  ARBuilder.Instance.EasyBuild(); 16 
17             /*遍歷trackerBehaviour腳本組件,這個trackerBehaviour組件繼承自TrackerBaseBehaviour。 18  ImageTargetBaseBehaviour必須先被加載到TrackerBaseBehaviour中它內部的target才能被跟蹤。所以在做多目標識別時,每一個 19  ar物體都要加載一個trackerBehaviour組件,因此在這里進行遍歷。 20             */
21             foreach (var trackerBehaviour in ARBuilder.Instance.TrackerBehaviours) 22                 trackerBehaviour.RegisterTargetEventHandler(this); 23  } 24 
25         
26        // 以下的代碼是對ITargetEventHandler接口的重寫
27 
28         void ITargetEventHandler.OnTargetFound(Target trackable)//target找到事件。
29  { 30             Debug.Log("<Global Handler> Found: " + trackable.Id); 31  } 32 
33         void ITargetEventHandler.OnTargetLost(Target trackable)//target丟失事件。
34  { 35             Debug.Log("<Global Handler> Lost: " + trackable.Id); 36  } 37 
38         void ITargetEventHandler.OnTargetLoad(Target trackable, bool status)//target加載結束事件。如果加載成功status為true否則為false。
39  { 40             Debug.Log("<Global Handler> Load target (" + status + "): " + trackable.Id + " -> " + trackable.Name); 41  } 42 
43         void ITargetEventHandler.OnTargetUnload(Target trackable, bool status)//target卸載結束事件。如果卸載成功status為true否則為false。
44  { 45             Debug.Log("<Global Handler> Unload target (" + status + "): " + trackable.Id + " -> " + trackable.Name); 46  } 47  } 48 }
MyEasyARBehaviour.cs

接下來讓我們打開EasyAR->Scripts目錄,我們所要編寫的腳本主要都是基於sdk目錄里的這幾個腳本。這里我們編寫一個MyImageTargetBehaviour.cs腳本繼承於該目錄里的ImageTargetBehaviour腳本。代碼如下:

 1 using UnityEngine;  2 
 3 namespace EasyAR  4 {  5     public class MyImageTargetBehaviour : ImageTargetBehaviour, ITargetEventHandler  6  {  7         protected override void Start()  8  {  9             base.Start(); 10  HideObjects(transform); 11  } 12         /// <summary>
13         /// 依次隱藏ImageTarget的子物體 14         /// </summary>
15         /// <param name="trans"></param>
16         void HideObjects(Transform trans) 17  { 18             for (int i = 0; i < trans.childCount; ++i) 19  HideObjects(trans.GetChild(i)); 20             if (transform != trans) 21                 gameObject.SetActive(false); 22  } 23         /// <summary>
24         /// 依次顯示ImageTarget的子物體 25         /// </summary>
26         /// <param name="trans"></param>
27         void ShowObjects(Transform trans) 28  { 29             for (int i = 0; i < trans.childCount; ++i) 30  ShowObjects(trans.GetChild(i)); 31             if (transform != trans) 32                 gameObject.SetActive(true); 33  } 34 
35         // 以下的代碼是對ITargetEventHandler接口的重寫
36         void ITargetEventHandler.OnTargetFound(Target target) 37  { 38  ShowObjects(transform); 39             Debug.Log("Found: " + target.Id); 40  } 41 
42         void ITargetEventHandler.OnTargetLost(Target target) 43  { 44  HideObjects(transform); 45             Debug.Log("Lost: " + target.Id); 46  } 47 
48         void ITargetEventHandler.OnTargetLoad(Target target, bool status) 49  { 50             Debug.Log("Load target (" + status + "): " + target.Id + " -> " + target.Name); 51  } 52 
53         void ITargetEventHandler.OnTargetUnload(Target target, bool status) 54  { 55             Debug.Log("Unload target (" + status + "): " + target.Id + " -> " + target.Name); 56  } 57  } 58 }
MyImageTargetBehaviour.cs

為場景中的EasyAR添加MyEasyARBehaviour腳本,同時移除ImageTarget自帶的ImageTargetBehaviour腳本組件,用我們寫的MyImageTargetBehaviour組件代替。

我們將網站上獲取的key填入MyEasyARBehaviour腳本組件相應的key一欄中即可。

*隨后我們准備一個識別圖和對應的模型。



在project窗口新建Texture,StreamingAssets文件夾,分別將識別圖lingzhou.jpg導入。新建一個Material名為Mat,將其shader改為Legacy Shaders/Diffuse,用Texture文件夾的lingzhou.jpg作為貼圖,再將其賦予場景中的Image Target實例。這是為了在場景中對識別圖可視化而進行的操作。而StreamingAssets里的lingzhou.jpg則用作實時比對,需要在Image Target實例的MyImageTargetBehaviour腳本組件處填寫相應路徑以及識別圖的尺寸,如圖所示:

將准備好的模型拖入場景,調整好位置,大小,角度之后將其作為ImageTarget的子物體即可。最終場景如圖所示:

打包成apk在手機上運行的效果如圖,一個萌妹子躍然紙上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM