首先打開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 }
接下來讓我們打開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 }
為場景中的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在手機上運行的效果如圖,一個萌妹子躍然紙上。


