[RESOLU] Culling mode pour UI

Questions à propos du GUI, y compris la partie script.
Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

[RESOLU] Culling mode pour UI

Message par Leuprochon » 17 Déc 2018 16:35

Bonjour à tous !

Alors j'ai un petit soucis.

J'ai réalisé un dialogue avec une boite qui apparaît/disparait avec ce tuto :

https://www.youtube.com/watch?v=_nRzoTzeyxU

Tout fonctionne bien.

Par contre je veux faire l'insérer dans une application en RA et la plus rien ne va ! Normalement il faut mettre le Culling Mode sur Cull Completely afin de lancer les animations que lorsque l'objet à tracké est bien détecté. Sauf que pour les UI j'ai cru comprendre que ça ne fonctionnait pas ....

Quelqu'un aurait une idée de comment faire ? Juste une case à cocher "Culling Mode pour UI" ça serait super :p, mais je doute que ça fonctionne !!

Merci à vous et bonne journée !

Leuprochon

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Culling mode pour UI

Message par Leuprochon » 18 Déc 2018 12:39

J'ai trouvé une piste intéressante je pense.

J'essaye d'utiliser un trigger (on/off ) qui passe sur On uniquement quand l'objet est détecté (Model Target de Vuforia). Malheureusement ça ne fonctionne pas, voici le code :

Si quelqu'un a une idée !

Code : Tout sélectionner

/*==============================================================================
    Copyright (c) 2017 PTC Inc. All Rights Reserved.
     
    Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
    All Rights Reserved.
    Confidential and Proprietary - Protected under copyright and other laws.
    ==============================================================================*/

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

/// <summary>
///     A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class EnableAnimation : MonoBehaviour, ITrackableEventHandler
{
	#region PRIVATE_MEMBER_VARIABLES

	protected TrackableBehaviour mTrackableBehaviour;
	public Animator animator;

	#endregion // PRIVATE_MEMBER_VARIABLES

	#region UNTIY_MONOBEHAVIOUR_METHODS

	protected virtual 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)
		{

			AudioSource audio = GetComponent<AudioSource> ();
			audio.Play ();
			animator.SetBool ("IsOpen", true);
		}
		else
		{
			AudioSource audio = GetComponent<AudioSource> ();
			audio.Stop ();
			animator.SetBool ("IsOpen", false);
		}
	}

	#endregion // PUBLIC_METHODS

	#region PRIVATE_METHODS

	protected virtual void OnTrackingFound()
	{
		var rendererComponents = GetComponentsInChildren<Renderer>(true);
		var colliderComponents = GetComponentsInChildren<Collider>(true);
		var canvasComponents = GetComponentsInChildren<Canvas>(true);

		// Enable rendering:
		foreach (var component in rendererComponents)
			component.enabled = true;

		// Enable colliders:
		foreach (var component in colliderComponents)
			component.enabled = true;

		// Enable canvas':
		foreach (var component in canvasComponents)
			component.enabled = true;

		animator.SetBool ("IsOpen", true);

	}


	protected virtual void OnTrackingLost()
	{
		var rendererComponents = GetComponentsInChildren<Renderer>(true);
		var colliderComponents = GetComponentsInChildren<Collider>(true);
		var canvasComponents = GetComponentsInChildren<Canvas>(true);


		// Disable rendering:
		foreach (var component in rendererComponents)
			component.enabled = false;

		// Disable colliders:
		foreach (var component in colliderComponents)
			component.enabled = false;

		// Disable canvas':
		foreach (var component in canvasComponents)
			component.enabled = false;

		animator.SetBool ("IsOpen", false);

	}

	#endregion // PRIVATE_METHODS
}


Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Culling mode pour UI

Message par boubouk50 » 18 Déc 2018 16:31

Alors effectivement, le ITrackableEventHandler est la bonne manière de détecter si l'objet est tracké ou non.
Ce que tu peux faire, c'est enlever le script de base de Vuforia (DefaultTrackableEventHandler) sur ton target et le remplacer par le tien. Tu copies-colles leur script et ajoute tes trucs dedans.
Le mieux serait d'ajouter une fonction.
MyTrackableEventHandler.cs

Code : Tout sélectionner

/*==============================================================================
Copyright (c) 2017 PTC Inc. All Rights Reserved.

Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
All Rights Reserved.
Confidential and Proprietary - Protected under copyright and other laws.
==============================================================================*/

using UnityEngine;
using Vuforia;

/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
///
/// Changes made to this file could be overwritten when upgrading the Vuforia version.
/// When implementing custom event handler behavior, consider inheriting from this class instead.
/// </summary>
public class MyTrackableEventHandler : MonoBehaviour, ITrackableEventHandler
{
    #region PROTECTED_MEMBER_VARIABLES

    protected TrackableBehaviour mTrackableBehaviour;
    protected TrackableBehaviour.Status m_PreviousStatus;
    protected TrackableBehaviour.Status m_NewStatus;

    #endregion // PROTECTED_MEMBER_VARIABLES

	//Declaration de l'AudioSource et de l'animator
	private AudioSource audio;
	public Animator animator;

    #region UNITY_MONOBEHAVIOUR_METHODS

    protected virtual void Start()
    {
    	//Initialisation de l'Audiosource: ICI seulement si l'Audiosource est sur cet objet sinon aller chercher le bon!!
    	audio = GetComponent<AudioSource> ();
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour)
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
    }

    protected virtual void OnDestroy()
    {
        if (mTrackableBehaviour)
            mTrackableBehaviour.UnregisterTrackableEventHandler(this);
    }

    #endregion // UNITY_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)
    {
        m_PreviousStatus = previousStatus;
        m_NewStatus = newStatus;

        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
            OnTrackingFound();
            AnimationAudio (true);
        }
        else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
                 newStatus == TrackableBehaviour.Status.NO_POSE)
        {
            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
            OnTrackingLost();
            AnimationAudio (false);
        }
        else
        {
            // For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND
            // Vuforia is starting, but tracking has not been lost or found yet
            // Call OnTrackingLost() to hide the augmentations
            OnTrackingLost();
            AnimationAudio (false);
        }
    }

    #endregion // PUBLIC_METHODS

	private void AnimationAudio (bool isPlaying) {
		if (isPlaying)
			audio.Play ();
		else
			audio.Stop ();
		animator.SetBool ("IsOpen", isPlaying);
	}

    #region PROTECTED_METHODS

    protected virtual void OnTrackingFound()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);

        // Enable rendering:
        foreach (var component in rendererComponents)
            component.enabled = true;

        // Enable colliders:
        foreach (var component in colliderComponents)
            component.enabled = true;

        // Enable canvas':
        foreach (var component in canvasComponents)
            component.enabled = true;
    }


    protected virtual void OnTrackingLost()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);

        // Disable rendering:
        foreach (var component in rendererComponents)
            component.enabled = false;

        // Disable colliders:
        foreach (var component in colliderComponents)
            component.enabled = false;

        // Disable canvas':
        foreach (var component in canvasComponents)
            component.enabled = false;
    }

    #endregion // PROTECTED_METHODS
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Leuprochon
Messages : 60
Inscription : 04 Déc 2017 19:12

Re: Culling mode pour UI

Message par Leuprochon » 18 Déc 2018 16:48

Super merci !! Le problème venait du fait que je n'assignais pas le script au bon objet !! Il fallait juste remplacer le script de Vuforia par le miens dans le Model Target comme tu m'as dit.

Merci bien !!

Leuprochon

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Culling mode pour UI

Message par boubouk50 » 18 Déc 2018 19:25

A sujet résolu...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « L'interface GUI »