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下載頁面
下載完成後解壓出來.
1.2 匯入SDK和其它素材
a) 在Project面板中右鍵空白處選擇Import Package, 再選Custom Package, 然後選擇解壓出來的Unity Package.
b) 匯入unity-chan模型
首先點選 Window→Asset Store. 然後在裡面搜尋unity-chan, 點選Import. 好像要求登入. 照做即可.
後面會彈出匯入對話方塊, 我把所有的素材都匯入了.
1.3 配置EasyAR
首先是在 Unity 編輯器中進行的操作:
- 將 Assets / EasyAR / Prefabs 資料夾內的 EasyAR_Startup 拖拽到 Hierarchy 檢視中
- 刪除場景中自帶的 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型別):
- 選中圖片,檢視 Inspector 檢視(會顯示 ImportSettings )
- 將 TextureType 設定為 Sprite (2D and UI)
- 點選下方的 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!.