1. 程式人生 > >Unity 3D學習(二) - EasyAR

Unity 3D學習(二) - EasyAR

本文記錄《Unity與EasyAR實戰教程》的操作過程,供以後查閱。

1 使用Easy AR.

1.1 獲取Lisence Key[許可證金鑰]

在EasyAR上註冊賬號並進入開發中心 ↓

a) 新增SDK License key: 

型別選"EasyAR SDK Basic : 免費,無水印", 應用名稱任意, PackageName(包名)需要與在Unity 3D匯出時一致, 我寫成了com.ken.testapp. 我做的是安卓應用, Bundle ID是蘋果用的, 所以Bundle ID不填寫

b) 下載Easy AR SDK

進入SDK下載頁面

. 點選EasyAR SDK 2.2.0 Basic for Unity3D (unitypackage).

下載完成後解壓出來.

1.2 匯入SDK和其它素材

a) 在Project面板中右鍵空白處選擇Import Package, 再選Custom Package, 然後選擇解壓出來的Unity Package.

b) 匯入unity-chan模型

首先點選 Window→Asset Store. 然後在裡面搜尋unity-chan, 點選Import. 好像要求登入. 照做即可.

後面會彈出匯入對話方塊, 我把所有的素材都匯入了.

1.3 配置EasyAR

首先是在 Unity 編輯器中進行的操作:

  1. 將 Assets / EasyAR / Prefabs 資料夾內的 EasyAR_Startup 拖拽到 Hierarchy 檢視中
  2. 刪除場景中自帶的 Main Camera( EasyAR_Startup 中包含了一個具有 Camera 功能的子物件—— RenderCamera )

 把Prefab拖進去, 這個Prefab就會運行了, 執行是為了初始化EasyAR.

然後在Hierarchy檢視中點一下剛拖進來的EasyAR_startup, 將開發中心提供的許可證祕鑰貼上到Key變數中.↓

1.4 使用模型

下載並匯入 Unity-chan 模型之後,在 UnityChan / Prefabs 資料夾下可以找到 unitychan 預設,然後,直接把這個預設新增到場景中即可。

1.5 執行專案

如果在電腦上執行, 直接點選播放按鈕即可.

如果想在安卓上執行, 在File→Build Settings裡面將平臺選為Android, 然後會提醒下載檔案, 按照說明做即可.

注意EasyAR SDK配置教程裡面"Graphics API(Android/iOS)"這一段, 一定要照做!

2 使用UGUI改進專案

2.1 設定螢幕比例

2.2 在場景中新增按鈕

由於原教程的素材網站已無法訪問, 所以我就自己製作了幾個. 連結

還要設定圖片的 TextureType (設定為UI型別):

  1. 選中圖片,檢視 Inspector 檢視(會顯示 ImportSettings )
  2. 將 TextureType 設定為 Sprite (2D and UI)
  3. 點選下方的 Apply 按鈕,使設定生效

然後新增兩個按鈕, 左按鈕和右按鈕. 參照蠻牛網上的UI課程學習即可. 

如果沒有學習上面的課程, 就直接建立兩個Button然後點下圖中的圓圈選擇影象, 再點Set Native Size設定大小.

3 使用Lean Touch

我寫了其自帶文件ReadMe的翻譯, 歡迎檢視:https://blog.csdn.net/u010099177/article/details/83110702.

a) 下載匯入

開啟Unity的Asset Store, 搜尋Lean Touch, 匯入專案中即可.

b) 新增到專案中

點選GameObject→Lean→Touch, 或者在Hierarchy視窗中右擊, 選擇Lean→Touch.

現在, 您應該看到一個新的遊戲物件叫做 "LeanTouch" , 並且 LeanTouch 處於選中狀態。
當您進入播放模式時, 此元件將自動將所有滑鼠和觸控輸入轉換為易於使用的格式。
請記住, 使用Lean Touch的指令碼只有在場景中有一個 LeanTouch 元件處於活動狀態時才起作用, 因此請確保向每個場景新增一個 (或將其設定成 載入時禁止銷燬)。(參考連結: DontDestroyOnLoad使用方法)

c) 為Unity Chan模型繫結兩個Lean Touch指令碼(位移和縮放), 並將Required Fingers設定為2

再按照原文所說的, 新增旋轉的指令碼. 

4 匯出並安裝

參見原文: Unity × EasyAR 實戰教程-第4章:匯出並安裝 第一部分

5 增加App主選單介面

(此時我在查詢 Animator 的相關知識)

經研究發現, Unity Chan模型Idle Changer指令碼負責顯示螢幕右上角的兩個按鈕, 這兩個按鈕可以播放上一個和下一個動畫. 播放動畫是通過呼叫Animator.Setbool("Next"或"Back", true)來實現的. 動畫播放完後, 程式會抓緊將"Next"或"Back"設定為False. 這個前後順序是在AnimationController裡面定義的.

        if (animator.GetBool("Back")) {
            if (animator.GetCurrentAnimatorStateInfo(0).fullPathHash != info.fullPathHash) {
                animator.SetBool("Back", false);
                info = animator.GetCurrentAnimatorStateInfo(0);
            }
        }

Unity Chan模型的Face Update是控制臉部表情的, 經測試 沒有效果, 不知道是不是我誤刪了什麼東西.

6 與EasyAR聯合起來

主要按照原教程做, 這裡糾正原文的兩個錯誤:

1) EasyImageTargetBehaviour的指令碼應該是這樣的, 原文有誤(應該是版本問題). 其實直接預設的ImageTargetBehavior就行. 原因是當GameObjectActiveControl開啟時, 預設行為就是目標出現則模型啟用, 目標消失則模型禁用. 官方文件的圖片放到下面了. 

    public class EasyImageTargetBehaviour : ImageTargetBehaviour {

        protected override void Awake() {
            base.Awake();
            GameObjectActiveControl = false;
            TargetFound += OnTargetFound;
            TargetLost += OnTargetLost;
        }
        protected override void Start() {
            base.Start();
            gameObject.SetActive(false);
        }

        void OnTargetFound(TargetAbstractBehaviour behaviour) {
            gameObject.SetActive(true);
        }

        void OnTargetLost(TargetAbstractBehaviour behaviour) {
            gameObject.SetActive(false);
        }
    }

 

2) 材質要選擇EasyAR→RealityPlane, 原文博主可能用的是舊版EasyAR

關於後面的脫卡教程, 我直接在OnTargetLost方法中將gameObject.setActive(False)註釋了, 不知道效果與原文的是否一致. 懶得看了.

7 總結一下配置EasyAR可能遇到的各種問題.

1) File→Build Setting→Player Settings

2) 指令碼的配置

Path所寫的檔名應該是StreamingAssets目錄下的檔案,(這是在Storage設定為Assets的情況下)

Name任意, Size裡面的x和y必須非0. GameObjectActiveControl就是是不是自動顯示隱藏, 如果程式碼裡沒有相關的邏輯就勾上, 有就去掉.

3) 被檢測影象的處理

首先要在StreamingAssets目錄下放, 供ImageTargetBehavior指令碼呼叫, 識別用. 另一個圖片的位置任意, 也不要在Inspector下改選項. 建立Material的位置也是任意, 檔名也任意, 這個是用來顯示的. 材質的Shader必須要選EasyAR/RealityPane!.