user6552697
user6552697

Reputation:

User Defined Target in Vuforia and Unity3D

I am looking for a tutorial on how to use UserDefinedTargets in Vuforia. All I've found was people showing Vuforia Samples, but samples is currently only available in Vuforia 2017.2 beta. I can't find archives either.

To take matters to my own hand, I attached this code to my UserDefinedTargetHandler

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

public class UDTHandler : MonoBehaviour, IUserDefinedTargetEventHandler
{

    private UserDefinedTargetBuildingAbstractBehaviour mTargetBuildingBehaviour;
    private DataSet mBuildDataSet;
    private bool mUdtInitialized = false;
    private ImageTargetBuilder.FrameQuality mFrameQuality = ImageTargetBuilder.FrameQuality.FRAME_QUALITY_NONE;
    private ImageTracker mImageTracker;

    public ImageTargetBehaviour ImageTargetTemplate;
    // Use this for initialization
    void Start()
    {
        mTargetBuildingBehaviour = GetComponent<UserDefinedTargetBuildingBehaviour>();
        if (mTargetBuildingBehaviour)
        {
            mTargetBuildingBehaviour.RegisterEventHandler(this);
        }
    }

    void OnGUI()
    {
        if (!mUdtInitialized)
            return;
        if (mFrameQuality == ImageTargetBuilder.FrameQuality.FRAME_QUALITY_HIGH ||
            mFrameQuality == ImageTargetBuilder.FrameQuality.FRAME_QUALITY_MEDIUM)
        {

            if (GUI.Button(new Rect(200, Screen.height - 100, 200, 90), "Build New Target"))
            {

                BuildNewTarget();
            }
        }
    }

    void BuildNewTarget()
    {
        string newTargetName = "myTargetName";
        mTargetBuildingBehaviour.BuildNewTarget(newTargetName, ImageTargetTemplate.GetSize().x);
    }

    // Update is called once per frame
    void Update()
    {

    }

    public void OnFrameQualityChanged(ImageTargetBuilder.FrameQuality frameQuality)
    {
        mFrameQuality = frameQuality;
    }

    public void OnInitialized()
    {

        mImageTracker = TrackerManager.Instance.GetTracker<ImageTracker>();
        if (mImageTracker != null)
        {

            mBuildDataSet = mImageTracker.CreateDataSet();
            mImageTracker.ActivateDataSet(mBuildDataSet);

            mUdtInitialized = true;
        }
    }

    public void OnNewTrackableSource(TrackableSource trackableSource)
    {
        mImageTracker.DeactivateDataSet(mBuildDataSet);

        if (mBuildDataSet.HasReachedTrackableLimit())
        {
            IEnumerable<Trackable> trackables = mBuildDataSet.GetTrackables();
            Trackable oldest = null;

            foreach (Trackable t in trackables)
            {
                if (oldest == null || t.ID < oldest.ID)
                    oldest = t;
            }

            if (oldest != null)
            {
                mBuildDataSet.Destroy(oldest, true);
            }
        }

        ImageTargetBehaviour imageTargetCopy = (ImageTargetBehaviour)Instantiate(ImageTargetTemplate);
        mBuildDataSet.CreateTrackable(trackableSource, imageTargetCopy.gameObject);
    }
}

it's missing a lot. I seriously need some help. I've looked through youtube, vuforia forums, google, etc but can't find a decent guide

Upvotes: 1

Views: 1000

Answers (1)

I was having the same problem. The simple solution is upgrade your unity to 2017.2 beta version. You can download that at the Beta Program page at the Unity website. It's much easier to use since they have added vuforia as a unity peripheral which contain every ar tools you need. Also, go to the asset store and download the vuforia core samples (free) for predefined templates.

Upvotes: 0

Related Questions