1. 程式人生 > >小功能丨Vuforia動態修改識別目標和3D物體

小功能丨Vuforia動態修改識別目標和3D物體

概要:

本章目標為不設定ImageTarget,Unity完成動態識別識別圖。

 

實現方法:

1、Vuforia官網上傳識別目標,下載unitypackage並匯入Unity

2、匯入Vuforia SDK,並將ARCamera放置到場景,啟用要識別的Datasets。由於激活了Datasets,這時,儘管沒有放置ImageTarget,運行遊戲,仍可看到Vuforia自動建立了多個帶有ImageTargetBehaviour的New Game Object

3、建立空物體TargetManager,新增TargetCreator指令碼,程式碼如下

using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class TargetCreator : MonoBehaviour
{
    //每張識別圖對應現實的3D物體
    public GameObject[] targetPrefabs;

    public void ConfigTrackable(string targetKey)
    {
        if (targetPrefabs == null && targetKey == null) return;

        //獲取場景中所有的識別圖   
        //GetTrackableBehaviours:Returns all currently instantiated TrackableBehaviours except Words
        IEnumerable<TrackableBehaviour> trackables = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();
        foreach (TrackableBehaviour behaviour in trackables)
        {
            if (behaviour.TrackableName == targetKey)
            {
                behaviour.gameObject.name = "ImageTarget"; //修改NewGameObject名稱為ImageTarget
                behaviour.gameObject.AddComponent<DefaultTrackableEventHandler>(); //新增事件處理指令碼
                behaviour.gameObject.AddComponent<TurnOffBehaviour>(); //新增禁用渲染工具指令碼

                foreach (GameObject prefab in targetPrefabs)
                {
                    if (prefab.name.Equals(targetKey))
                    {
                        GameObject obj = GameObject.Instantiate(prefab);
                        obj.transform.parent = behaviour.transform;
                        return;
                    }
                }
            }
        }
    }

}

程式碼解析:

1)、由behaviour.TrackableName == targetKey可以看出,我們在呼叫ConfigTrackable(string targetKey)方法時,要傳入的是識別圖的名稱

2)、由prefab.name.Equals(targetKey)可以看出,我們預製體的名稱,要=Vuforia上傳的識別圖的名稱

4、建立Button和InputField,如下圖所示

5、建立指令碼Skode_Identification,掛載到TargetManager,程式碼如下。將輸入框的text賦值到inputText,Button繫結Skode_Iden方法

using UnityEngine;
using UnityEngine.UI;

public class Skode_Identification : MonoBehaviour {

    public Text inputText;
    public void Skode_Iden()
    {
        GetComponent<TargetCreator>().ConfigTrackable(inputText.text);
    }
}

6、測試(在PC端進行,要有攝像頭)

運行遊戲,輸入某識別圖的名稱,點選Button,將攝像頭對準要識別的圖片

在Hierarchy面板找到顯示出來的模型,此時該模型比例或許不是預期想要的大小,調整模型位置角度等,記下其Transform各資料,進行下一步的Vuforia DefaultTrackableEventHandler—OnTrackingFound等功能修改,接下來步驟由玩家根據自己要求自行修改

7、Enjoy

 

 

技術拓展:

本章是在Unity端直接實現,由Unity的該方法,在特殊情況下,也可進行Unity與安卓的互調。

呼叫參考連結:互調