I found this custom .cs code of "DefaultTrackableEventHandler.cs" to enabled/disable a canvas with an Image Target, it works very well !
//enable canvas Canvas canvasObject = (Canvas) FindObjectOfType(typeof(Canvas)); { canvasObject.enabled = true; }
//disable canvas Canvas canvasObject = (Canvas) FindObjectOfType(typeof(Canvas)); { canvasObject.enabled = false; }
Now I would like to work with Multiple Image Target, but the problem is : on my android only the first canvas ( "Canvas1" ) react to the code, and this for all Image Target :
ANDROID SCREENSHOTS
Default View : Button1 disable / Button2 enabled
ImageTarget1 : Button1 enabled / Button2 enabled
Image Target2 : Button1 enabled / Button2 enabled
I think the code use only the first canvas he finds in the hierarchy...
AR Camera
►Image Target 1
►My 3D model
►GameObject ( empty )
►Canvas1
►Button1
►Image Target 2
►My 3D model
►GameObject ( empty )
►Canvas2
►Button2
►Directional light
►EventSystem
I would like to find a solution so that each canvas react according to their Image Target ?
Thank a lot ;)
CUSTOM "DefaultTrackableEventHandler.cs" by Jerry Tube
using UnityEngine; /// <summary> /// A custom handler that implements the ITrackableEventHandler interface. /// </summary> public class DefaultTrackableEventHandler : MonoBehaviour, ITrackableEventHandler { #region PRIVATE_MEMBER_VARIABLES private TrackableBehaviour mTrackableBehaviour; #endregion // PRIVATE_MEMBER_VARIABLES #region UNTIY_MONOBEHAVIOUR_METHODS void Start() { mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } } #endregion // UNTIY_MONOBEHAVIOUR_METHODS #region PUBLIC_METHODS /// <summary> /// Implementation of the ITrackableEventHandler function called when the /// tracking state changes. /// </summary> public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { OnTrackingFound(); } else { OnTrackingLost(); } } #endregion // PUBLIC_METHODS #region PRIVATE_METHODS private void OnTrackingFound() { Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); Canvas[] canvasObject = GetObjectInChildren<Canvas>(true); //enable canvas Canvas canvasObject = (Canvas) FindObjectOfType(typeof(Canvas)); { canvasObject.enabled = true; } // Enable rendering: foreach (Renderer component in rendererComponents) { component.enabled = true; } // Enable colliders: foreach (Collider component in colliderComponents) { component.enabled = true; } Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found"); } private void OnTrackingLost() { Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true); Collider[] colliderComponents = GetComponentsInChildren<Collider>(true); Canvas[] canvasObject = GetObjectInChildren<Canvas>(true); //disable canvas Canvas canvasObject = (Canvas) FindObjectOfType(typeof(Canvas)); { canvasObject.enabled = false; } // Disable rendering: foreach (Renderer component in rendererComponents) { component.enabled = false; } // Disable colliders: foreach (Collider component in colliderComponents) { component.enabled = false; } Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost"); } #endregion // PRIVATE_METHODS }
Attachment | Size |
---|---|
![]() | 83.53 KB |
![]() | 39.73 KB |
![]() | 85.33 KB |
This help to find canvas and his child objects