1. 程式人生 > >unity-ar-vuforia記錄

unity-ar-vuforia記錄


title: unity-ar-vuforia記錄
categories: Unity3d
tags: [unity, ar, 增強現實]
date: 2018-10-11 10:35:18
comments: false

unity-ar-vuforia記錄, vuforia 是 Unity 2017.3 之後直接內建支援的第三方ar庫.


相關資料


識別相關使用

參考官方測試工程: Vuforia-Core-Samples (我的git倉庫放著)

本地識別

ImageTarget

  1. 識別物件go (有材質球貼圖為識別圖) 中新增一個元件 ImageTargetBehavior

    , 該元件中指定 識別方式 (本地識別, 雲識別), 識別庫 等等

    指定 識別圖 為後臺配置的圖. (後臺連結 , 測試工程, 其實應該是 Astronaut)

  2. 新增識別回撥. 識別物件go 中新增一個 xxx.cs 自定義指令碼, 實現 ITrackableEventHandler 介面的方法. (參考 DefaultTrackableEventHandler.cs)

    public void OnTrackableStateChanged(
            TrackableBehaviour.Status previousStatus,
            TrackableBehaviour.
    Status
    newStatus) { m_PreviousStatus = previousStatus; m_NewStatus = newStatus; 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(); } else { OnTrackingLost(); } }

    可以在 OnTrackingFound , OnTrackingLost 中實現 顯示/隱藏 等邏輯, (獲取 識別物件go 下所有子節點的 Render 元件 enable = false/true)

  3. 所有需要邏輯控制的 3d模型 都必須放在 識別物件go 之下作為子節點. (第2步 可以控制顯示隱藏邏輯)


雲識別

CloudRecoTarget

  • 參考: https://blog.csdn.net/he_wen_jian/article/details/53203626

  • 識別之後 可以開追蹤

    public void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult)
    // Enable the new result with the same ImageTargetBehaviour:
    m_TargetFinder.EnableTracking(targetSearchResult, m_ImageTargetBehaviour.gameObject);
    
    • 這樣可以讓 m_ImageTargetBehaviour.gameObject 實時追蹤, 並回調 改 gameObject 身上的註冊的處理回撥 ITrackableEventHandler. !!!但是!!!, 這樣如果雲識別再次開啟, 且識別到相同的目標, 就不會再次回撥 OnNewSearchResult

      public class TrackEventHandler : MonoBehaviour, ITrackableEventHandler 
      mTrackableBehaviour.RegisterTrackableEventHandler(this);
      public void OnTrackableStateChanged	
      

隱藏識別圖go

在 ImageTarget 上直接掛上 vuforia 內建指令碼 TurnOffBehavior 即可


錯誤處理

註冊/反註冊 vuforia 報錯回撥即可. 參考 DefaultInitializationErrorHandler.cs

void Awake() {
	VuforiaRuntime.Instance.RegisterVuforiaInitErrorCallback(OnVuforiaInitializationError);
}

void OnDestroy() {
	VuforiaRuntime.Instance.UnregisterVuforiaInitErrorCallback(OnVuforiaInitializationError);
}

public void OnVuforiaInitializationError(VuforiaUnity.InitError initError) {
...
}

識別分類


刪除 DataSet

  1. 刪除 Assets/Editor/VuforiaAssets/StreamingAssets 兩個資料夾
  2. 用 sublime 編輯器將整個專案拖進去, 全文搜尋 xxx 資料集, 找到並刪除. (vscode 遮蔽了 .unity .prefab 會搜尋不到)

只識別, 不同步ar相機slam

ar相機 會把所有場景中所有能看見的物體 (cull layer), 同步到當前識別圖位置, 以識別圖位置為 (0, 0, 0), 識別圖移動, 所有物體跟隨移動

所以如果需要不跟隨移動, 需要另一個 普通相機 支援, 設定一個 layer a, 將物體設定為 layer a, ar相機剔除 layer a, 普通相機 只識別 layer a


打包


採坑記錄

  • 例項化prefab ImageTarget 不能識別

    必須直接放在場景中, 才能進行識別

  • ar 相機問題

    1. ar 相機和 ImageTarget 同時在 場景中 預製好才能生效. 都不能通過 GameObject.Instantiate 例項化出來, 否則無法識別.
    2. ar相機 能看到的所有物體, 都會同步定位到 Target 上. 所以不限被同步定位的話, 需要新增另一個輔助相機, 設定 物體的layer, ar相機剔除這個layer, 普通相機可以看到這個layer的物體. 如果要渲染疊加到 ar相機上面, 需要將 普通相機 的 clear flags 設定為 solid color
  • 啟用 vuforia ar 模式下, 自動啟用 vuforia behavior

    即使沒有新增 vuforia 的 ar camera, 而是新增自己的 camera, 會自動往 camera 中新增 vuforia behavior

  • 刪除了 導進去的資料集, 還是報錯: Dataset xxx could not be loaded

    用 sublime 編輯器將整個專案拖進去, 全文搜尋 xxx 資料集, 找到並刪除.

    (用 vscode 遮蔽了 .unity .prefab 檔案, 所以一直沒搜到, 暈)

  • pc 平臺執行報錯: DllNotFoundException: VuforiaWrapper

    vuforia 不支援 pc平臺. 官方回答: Standalone Windows applications are not currently supported by Vuforia.

    參考: https://developer.vuforia.com/forum/unity/dll-not-found-vuforiawrapper

  • android 平臺打包報錯: Vuforia does not support Android TV. Please disable the Android TV compatibility in the Player Settings.

    取消掉 Other SettingsAndroid TV compatibility 的勾選

  • unity 編譯報錯: does not exist in the namespace 'Vuforia' , 找不到, 沒有匯入 vuforia 的程式集

    1. 無論什麼平臺都要先設定 Build Settings -> Player Settings -> Other Settings, 勾選 Vuforia Augmented Reality
      • mac 環境下的unity 需要安裝 unity 對應版本的 pkg 包, 如 UnitySetup-Vuforia-AR-Support-for-Editor-2018.2.8f1.pkg
      • mac 環境下安裝包之前, 必須確保 unity 是在系統 Applications -> Unity 資料夾裡. 很多時候我們裝了多個版本一般都會命名為對應的版本的資料夾 如 Applications -> Unity2018.2.8f1 , 此時安裝 pkg包是會失敗的. 必須是 Unity 資料夾才能安裝成功
    2. 在場景裡隨便新建一個 vuforia 的東西, 如: 右鍵 -> vuforia -> ar camera , 會提示 import Vuforia Assets 是否匯入 vuforia 相關資源, 點選匯入
    3. 重啟專案. 如果還是提示 找不到 vuforia 程式集, 升級到最新的 vuforia 即可. 如升級到 7.5.26 VuforiaSupportInstaller-Mac-7-5-26.zip