狠狠撸

狠狠撸Share a Scribd company logo
Vuforia AR
同時追踨多張辨識圖
Revised on April 14, 2021
? Unity AR專案設定
? 建立Vuforia AR Camera
? 滙入Vuforia特徵資料庫
? 加入AR辨識圖
? 設定AR物件
? 同時追踨多張辨識圖
? 解析DefaultTrackableEventHandler程
式框架
? 新增3D專案,AR multitargets
? 選單命令File> Build Settings
? 使用筆電或PC搭配Web Cam,可先選擇「PC, Mac & Linux Standalone」
方便測試;要使用手機實機測試,則選擇對應的手機平台
設定Unity AR專案 1/3
2
? 點擊Build Settings對話視窗左下角「Player Settings…」按鈕
? 勾選XR Settings項目中的Vuforia Augmented Reality Support,
安裝Vuforia Engine AR套件
如有警告訊息(大多是相容性問題),參照訊息內容修正設定即可
設定Unity AR專案 2/3
3
? Android平台設定
? 確認修正Player Settings設定中的Other Settings>
Identification> Package Name
? 設定Player Settings設定中的Other Settings> Identification>
Minimum API Level
? Vuforia Engine 8.X只支援Android 4.4之後版本;Vuforia Engine 9.X
只支援Android 7之後版本
? 取消勾選Player設定中的Other Settings> Configuration>
Android TV Compatibility
設定Unity AR專案 3/3
4
? 刪除場景中的Main Camera
? 選單命令GameObject> Vuforia Engine> AR Camera,在場景加入
AR Camera
? 點擊Open Vuforia Engine configuration按鈕
建立Vuforia AR Camera 1/3
5
? 將Vuforia License Key貼入Global項目的App License Key欄
建立Vuforia AR Camera 2/3
6
? 確定Play Mode項目中的Camera Device欄是目前使用的攝影機
建立Vuforia AR Camera 3/3
7
? 選單命令Assets> Import Package> Custom Package…滙入從
Vuforia封裝下載的特徵資料庫package
滙入Vuforia特徵資料庫 1/2
8
? 檢視ARCamera之Vuforia Engine Cofiguration設定,在
Databases項目中應看到您剛才滙入的辨識特徵資料庫名稱
滙入Vuforia特徵資料庫 2/2
9
? 在場景加入AR辨識圖片
? 選單命令GameObject> Vuforia Engine> Image Target
? Type = Predefined
? Database = unityAR (剛才滙入的特徵資料庫名稱)
? Image Target = baymax_ii (由特徵資料庫中選取辨識圖)
加入AR辨識圖片
10
? 滙入AR動作3D模型baymax.unitypackage
設定AR動作模型 1/5
11
? 檢視baymax模型中的Baymax_AmatureAction動畫,目前並未設定循
環動畫
? 點擊Edit…按鈕,勾選Loop Time
? 點擊Apply按鈕
設定AR動作模型 2/5
12
? 拖曳AR動作模型(baymax)成為ImageTarget的子物件
? 調整AR動作模型到欲顯現的相對位置和大小
設定AR動作模型 3/5
13
? 選單命令Assets> Create> Animator Controller
? 更名為baymaxController
? 雙擊baymaxController開啟Animator編輯視窗,拖曳baymax模型中
的Baymax_AmatureAction動畫到Animator編輯視窗
設定AR動作模型 4/5
14
? 將baymaxController拖曳到baymax的Animator元件之Controller
欄
? 執行測試
設定AR動作模型 5/5
15
? 選單命令GameObject> Vuforia Engine> Image Target,在場景
新增?張AR辨識圖
? Type = Predefined
? Database = unityAR (剛才滙入的特徵資料庫名稱)
? Image Target = iron_man (由特徵資料庫中選取辨識圖)
辨識圖預設位置為(0,0,0),所以兩張辨識圖會重疊在?起,實際上辨識圖
位置並不影響AR功能,因為AR Camera是以辦識圖為座標中心,但為了方便
設計階段檢視,可將辨識圖平移錯開位置
加入第二張AR辨識圖
16
? 滙入AR動作3D模型ironmax.unitypackage
設定第二張辨識圖AR動作模型 1/5
17
? 拖曳AR動作模型(ironman)成為ImageTarget的子物件
? 調整AR動作模型到欲顯現的相對位置和大小
設定第二張辨識圖AR動作模型 2/5
18
? 選單命令Assets> Create> Animator Controller
? 更名為ironmanController
? 雙擊ironmanController開啟Animator編輯視窗,拖曳Animations
中Run動畫到Animator編輯視窗
設定第二張辨識圖AR動作模型 3/5
19
? 將ironmanController拖曳到ironman的Animator元件之
Controller欄
? 取消勾選Apply Root Motion (使模型原地跑步)
設定第二張辨識圖AR動作模型 4/5
20
? 執行測試
? 辨識圖同時出現時,只有其中?張會觸發AR動作模型
設定第二張辨識圖AR動作模型 5/5
21
? 選取AR Camera
? 點擊Open Vuforia Engine configuration按鈕
? 將Global項目中的Max Simultaneous Tracked Images值調整為2
註:同時追踨過多辨識圖,會影響辨識運算效能,建議不要超過5
設定使用多重辨識物 1/2
22
? 執行測試
? 辨識圖同時出現時,兩張都會觸發AR動作模型
設定使用多重辨識物 2/2
23
? ImageTargetBehaviour程式腳本負責運行時追蹤圖像目標作業
? 而ImageTargetBehaviour繼承自TrackableBehaviour,要獲得追
蹤行為的狀態,就要先取得所追蹤目標的TrackableBehaviour
? 要處理追蹤行為狀態改變事件,必須實作ITrackableEventHandle介
面的OnTrackableStateChanged方法,並將實作
ITrackableEventHandle介面的物件註冊到所追蹤目標的
TrackableBehaviour中
解析DefaultTrackableEventHandler 1/7
24
using UnityEngine;
using Vuforia;
public class DefaultTrackableEventHandler:MonoBehaviour, ITrackableEventHandler
{
#region PROTECTED_MEMBER_VARIABLES protected TrackableBehaviour mTrackableBehaviour;
protected TrackableBehaviour.Status m_PreviousStatus;
protected TrackableBehaviour.Status m_NewStatus;
#endregion // PROTECTED_MEMBER_VARIABLES
#region UNITY_MONOBEHAVIOUR_METHODS
protected virtual void Start() {
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
protected virtual void OnDestroy() {
if (mTrackableBehaviour)
mTrackableBehaviour.UnregisterTrackableEventHandler(this);
}
#endregion // UNITY_MONOBEHAVIOUR_METHODS
解析DefaultTrackableEventHandler 2/7
25
實作ITrackableEventHandle介面
#region PUBLIC_METHODS
/*Implementation of the ITrackableEventHandler function called when the
tracking state changes. */
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus) {
m_PreviousStatus = previousStatus;
m_NewStatus = newStatus;
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName +
" " + mTrackableBehaviour.CurrentStatus +
" -- " + mTrackableBehaviour.CurrentStatusInfo);
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) {
OnTrackingFound();
}
else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
newStatus == TrackableBehaviour.Status.NO_POSE) {
OnTrackingLost();
}
解析DefaultTrackableEventHandler 3/7
26
else {
// For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND
// Vuforia is starting, but tracking has not been lost or found yet
// Call OnTrackingLost() to hide the augmentations
OnTrackingLost();
}
}
#endregion // PUBLIC_METHODS
解析DefaultTrackableEventHandler 4/7
27
#region PROTECTED_METHODS
protected virtual void OnTrackingFound() {
Debug.Log("OnTrackingFound");
if (mTrackableBehaviour) {
var rendererComponents =
mTrackableBehaviour.GetComponentsInChildren<Renderer>(true);
var colliderComponents =
mTrackableBehaviour.GetComponentsInChildren<Collider>(true);
var canvasComponents =
mTrackableBehaviour.GetComponentsInChildren<Canvas>(true);
foreach (var component in rendererComponents) // Enable rendering:
component.enabled = true;
foreach (var component in colliderComponents) // Enable colliders:
component.enabled = true;
foreach (var component in canvasComponents) // Enable canvas':
component.enabled = true;
}
}
解析DefaultTrackableEventHandler 5/7
28
protected virtual void OnTrackingLost() {
Debug.Log(" OnTrackingLost ");
if (mTrackableBehaviour) {
var rendererComponents =
mTrackableBehaviour.GetComponentsInChildren<Renderer>(true);
var colliderComponents =
mTrackableBehaviour.GetComponentsInChildren<Collider>(true);
var canvasComponents =
mTrackableBehaviour.GetComponentsInChildren<Canvas>(true);
foreach (var component in rendererComponents) // Disable rendering:
component.enabled = false;
foreach (var component in colliderComponents) // Disable colliders:
component.enabled = false;
foreach (var component in canvasComponents) // Disable canvas':
component.enabled = false;
}
}
#endregion // PROTECTED_METHODS
}
解析DefaultTrackableEventHandler 6/7
29
解析DefaultTrackableEventHandler 7/7
30

More Related Content

Vuforia AR 同時追踨多張辨識圖