Last active
June 15, 2024 04:37
-
-
Save vad710/015629ca8d56b4a016e072cd0c2dd18c to your computer and use it in GitHub Desktop.
Class that takes the content from a Vuforia Image target and puts it inside of a ground plane stage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using Vuforia; | |
public class AnchorTargetListener : MonoBehaviour, ITrackableEventHandler | |
{ | |
//The Goal of this class is to automatically Initiate a Ground Plane when the Image Target is detected | |
// Use this classs in combination with the PlaceContentFromImageTarget if you want to move the content | |
// of an image target onto the Ground Plane Stage | |
//This class should replace the default AnchorInputListenerBehaviour in the PlaneFinder GameObject | |
//Don't forget to set the OnInputReceivedEvent of this component to call the PlaneFinderBehaviour | |
public ImageTargetBehaviour ImageTarget; | |
private bool _planeFound = false; | |
public AnchorInputListenerBehaviour.InputReceivedEvent OnInputReceivedEvent; | |
void Start () | |
{ | |
if (this.ImageTarget != null) | |
{ | |
this.ImageTarget.RegisterTrackableEventHandler(this); | |
} | |
} | |
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) | |
{ | |
if (_planeFound) | |
{ | |
return; | |
} | |
if (newStatus == TrackableBehaviour.Status.DETECTED || | |
newStatus == TrackableBehaviour.Status.TRACKED ) | |
{ | |
Debug.Log("Target Found!"); | |
if (OnInputReceivedEvent != null) | |
{ | |
//TODO: is Camera.main still slow? | |
var hitTestLocation = Camera.main.WorldToScreenPoint(this.ImageTarget.transform.position); | |
Debug.Log("hit test location: " + hitTestLocation); | |
this.OnInputReceivedEvent.Invoke(hitTestLocation); | |
_planeFound = true; | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using UnityEngine; | |
using Vuforia; | |
public class PlaceContentFromImageTarget : MonoBehaviour | |
{ | |
//This class should replace the default ContentPositioningBehaviour in the PlaneFinder GameObject | |
//Don't forget to set the OnInteractiveHitTest of the PlaneFinderBehaviour to call this class | |
//IMPORTANT: | |
// Be sure to enable Device Tracker and set mode to POSITIONAL in the Vuforia Configuration | |
public AnchorStageBehaviour AnchorStage; | |
public ImageTargetBehaviour ImageTarget; | |
private PositionalDeviceTracker _deviceTracker; | |
private bool _anchorSet; | |
public void Start () | |
{ | |
var x = new ContentPositioningBehaviour(); | |
var y = x.AnchorStage; | |
if (AnchorStage == null) | |
{ | |
Debug.LogWarning("AnchorStage must be specified"); | |
return; | |
} | |
if (ImageTarget == null) | |
{ | |
Debug.LogWarning("Image Target must be specified"); | |
return; | |
} | |
AnchorStage.gameObject.SetActive(false); | |
} | |
public void Awake() | |
{ | |
VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted); | |
} | |
public void OnDestroy() | |
{ | |
VuforiaARController.Instance.UnregisterVuforiaStartedCallback(OnVuforiaStarted); | |
} | |
private void OnVuforiaStarted() | |
{ | |
_deviceTracker = TrackerManager.Instance.GetTracker<PositionalDeviceTracker>(); | |
} | |
public void OnInteractiveHitTest(HitTestResult result) | |
{ | |
if (_anchorSet) | |
{ | |
//Leave if the anchor has already been set | |
return; | |
} | |
if (result == null || AnchorStage == null) | |
{ | |
Debug.LogWarning("Hit test is invalid or AnchorStage not set"); | |
return; | |
} | |
//Let's go ahead and create the anchor at the position of the hit test | |
var anchor = _deviceTracker.CreatePlaneAnchor(Guid.NewGuid().ToString(), result); | |
if (anchor != null) | |
{ | |
AnchorStage.transform.SetParent(anchor.transform); | |
AnchorStage.transform.localPosition = Vector3.zero; | |
AnchorStage.transform.localRotation = Quaternion.identity; | |
AnchorStage.gameObject.SetActive(true); | |
//Make sure that the Image Target is currently tracking | |
if (ImageTarget.CurrentStatus == TrackableBehaviour.Status.DETECTED || | |
ImageTarget.CurrentStatus == TrackableBehaviour.Status.TRACKED || | |
ImageTarget.CurrentStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) | |
{ | |
//Note: If you are handling objects differently, there is an opportunity to optimize this section | |
var defaultEventHandler = this.ImageTarget.GetComponent<DefaultTrackableEventHandler>(); | |
if (defaultEventHandler != null) | |
{ | |
defaultEventHandler.OnTrackableStateChanged(TrackableBehaviour.Status.UNKNOWN, | |
TrackableBehaviour.Status.TRACKED); | |
} | |
//Let's move the contents of the image target onto the ground plane | |
for (var i = 0; i < ImageTarget.transform.childCount; i++) | |
{ | |
var content = ImageTarget.transform.GetChild(i); | |
content.SetParent(AnchorStage.transform); | |
} | |
} | |
_anchorSet = true; | |
} | |
} | |
} |
is this still functioning in vuforia 8.1.10 than?
From where did you learn vuforia codes
It's seem Little complicated for to study vuforia documentation
@vad710 I got this ported to Vuforia 10. Is that something you want to share by any chance? I don't use github much but maybe I can upload it and you could link it?
Sure - I'd be happy to update it!
hey checking back any updates @contrejo27 @vad710
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@yosun - yes, does Vuforia Engine now support ARFoundation?