[RESOLU] Script de contrôle d'animation pour vuforia

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
korwinnn
Messages : 35
Inscription : 10 Juin 2015 10:53

[RESOLU] Script de contrôle d'animation pour vuforia

Message par korwinnn » 13 Juin 2017 17:59

Bonjour à tous,
Je suis actuellement sur un projet, évoqué sur un autre topic de ce forum (pb de multi-target).
Mon projet basé sur une reconnaissance de cible(s) Vuforia doit faire apparaitre une animation.
Cette animation je la contrôle grâce à un script avec des boutons "play", "Stop", "Loop" et "quitter"(application).
Cela fonctionne sans aucun soucis.
Cependant, je souhaiterai que ces mêmes boutons qui contrôle mon animation contrôle aussi un son qui se lancerait en même temps que l'animation, idem pour un effet particule trouvé sur l'asset store.
J'ai tenté de m'inspirer de ce topic:
https://developer.vuforia.com/forum/faq ... t-detected
Mais je n'ai que des messages d'erreur en essayant de l'adapter à mon script.
Ci-dessous mon script:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class controlAnim : MonoBehaviour {

	private Animation anim;


	void Start() {
		anim = this.transform.GetComponent<Animation> ();
		
			
		
	}

	void OnGUI () {
		if (GUI.Button (new Rect (25, 25, 100, 30), "Play")) {
			anim.wrapMode = WrapMode.Default;
			anim.Play();
			
		}
		if (GUI.Button (new Rect (25, 75, 100, 30), "Stop")) {
			anim.Stop();
			
		}

		if (GUI.Button (new Rect (25, 125, 100, 30), "Play/Loop")) {
			anim.wrapMode = WrapMode.Loop;
			anim.Play();
			
		}
		if (GUI.Button (new Rect (25, 175, 100, 30), "Quitter")) {
			Application.Quit ();
		}

	}
}

Merci beaucoup à tous
Dernière édition par korwinnn le 14 Juin 2017 23:32, édité 1 fois.

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

Re: Script de contrôle d'animation pour vuforia

Message par boubouk50 » 13 Juin 2017 18:02

Tes infos sont contradictoires. Quand souhaites-tu jouer le son? D'après le lien, c'est à la détection, d'après tes dires c'est lors du clic sur un bouton. Le premier nécessite de récupérer des infos provenant de Vuforia, le second est totalement indépendant.
"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

korwinnn
Messages : 35
Inscription : 10 Juin 2015 10:53

Re: Script de contrôle d'animation pour vuforia

Message par korwinnn » 13 Juin 2017 19:23

Merci boubouk50 pour ta remarque.
En effet, mon souhait est de déclencher le son par les commandes et non à la détection.
Mais c'est le seul script que j'ai trouvé sur vuforia qui me paraissait pertinent ... et que j'ai voulu adapter.

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

Re: Script de contrôle d'animation pour vuforia

Message par boubouk50 » 14 Juin 2017 09:24

Ok. Donc pas besoin de toucher quoi que ce soit sur la partie Vuforia, vu que ce n'est pas lié à la réalité augmentée.
T'embêtes donc pas, les boutons d'Unity gèrent très bien cela tout seul, même pas besoin de script:
https://www.youtube.com/watch?v=kl7LZ6JQe1M

-EDIT- Oups j'avais oublié que tu passais par OnGUI (). Il te faut simplement renseigner les clips à jouer sur les boutons.

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class controlAnim : MonoBehaviour {

   private Animation anim;
   private Audiosource audio;
   public AudioClip [] clips; //Remplir à la main les 4 sons à jouer

   void Start() {
      anim = this.transform.GetComponent<Animation> ();
      audio =  this.transform.GetComponent<Audiosource> ();
   }

   void OnGUI () {
      if (GUI.Button (new Rect (25, 25, 100, 30), "Play")) {
         anim.wrapMode = WrapMode.Default;
         anim.Play();
         audio.clip = clips[0];
          audio.Play();
      }
      
      if (GUI.Button (new Rect (25, 75, 100, 30), "Stop")) {
         anim.Stop();
         audio.clip = clips[1];
          audio.Play();
      }

      if (GUI.Button (new Rect (25, 125, 100, 30), "Play/Loop")) {
         anim.wrapMode = WrapMode.Loop;
         anim.Play();
         audio.clip = clips[2];
          audio.Play();
      }
      
      if (GUI.Button (new Rect (25, 175, 100, 30), "Quitter")) {
          audio.clip = clips[3];
          audio.Play();
         Application.Quit ();
      }

   }
}
"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

korwinnn
Messages : 35
Inscription : 10 Juin 2015 10:53

Re: Script de contrôle d'animation pour vuforia

Message par korwinnn » 14 Juin 2017 10:46

Merci boubouk50 de ton aide.
J'ai suivi tes conseils et modifié mon script en conséquence (je précise que les 4 sons à jouer/contrôler en même temps que l'animation est le même son unique et lié à l'animation). Dans ma nomenclature de projet j'ai rajouté un Gameobject "Audiosource" que j'ai lié à mon son tout en décochant "play on awake".
Le script que j'ai mis ressemble à cela :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class controlAnim : MonoBehaviour {

   private Animation anim;
   private Audiosource audio;
   public AudioClip MonSon; //Remplir à la main les 4 sons à jouer

   void Start() {
      anim = this.transform.GetComponent<Animation> ();
      audio =  this.transform.GetComponent<Audiosource> ();
   }

   void OnGUI () {
      if (GUI.Button (new Rect (25, 25, 100, 30), "Play")) {
         anim.wrapMode = WrapMode.Default;
         anim.Play();
         audio.clip = MonSon;
          audio.Play();
      }
     
      if (GUI.Button (new Rect (25, 75, 100, 30), "Stop")) {
         anim.Stop();
         audio.clip = MonSon];
          audio.Stop();
      }

      if (GUI.Button (new Rect (25, 125, 100, 30), "Play/Loop")) {
         anim.wrapMode = WrapMode.Loop;
         anim.Play();
         audio.clip = clips MonSon;
         audio.wrapMode = WrapMode.Loop;
         audio.Play();
      }
     
      if (GUI.Button (new Rect (25, 175, 100, 30), "Quitter")) {
          audio.clip = MonSon];
          audio.Stop();
         Application.Quit ();
      }

   }
}
En réponse la console de Unity me dit qu'il y a une erreur en CS(7,12); error CS0246, the type or namespace "Audiosource" could not be found. Are you missing assemble reference ?
J'ai probablement mal désigné ma ligne CS8 audioclip !?
Merci

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

Re: Script de contrôle d'animation pour vuforia

Message par evereal » 14 Juin 2017 11:14

Code : Tout sélectionner

private Audiosource audio;
AudioSource
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

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

Re: Script de contrôle d'animation pour vuforia

Message par boubouk50 » 14 Juin 2017 11:28

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class controlAnim : MonoBehaviour {

   private Animation anim;
   private AudioSource audio;
   public AudioClip monSon;

   void Start() {
      anim = this.transform.GetComponent<Animation> ();
      audio =  this.transform.GetComponent<Audiosource> ();
      audio.clip = monSon;
   }

   void OnGUI () {
      if (GUI.Button (new Rect (25, 25, 100, 30), "Play")) {
         anim.wrapMode = WrapMode.Default;
         anim.Play();
         audio.PlayOneShot ();
      }
     
      if (GUI.Button (new Rect (25, 75, 100, 30), "Stop")) {
         anim.Stop();
         audio.Stop();
      }

      if (GUI.Button (new Rect (25, 125, 100, 30), "Play/Loop")) {
         anim.wrapMode = WrapMode.Loop;
         anim.Play();
         audio.Play();
      }
     
      if (GUI.Button (new Rect (25, 175, 100, 30), "Quitter")) {
          audio.Stop();
         Application.Quit ();
      }

   }
}
WrapMode n'existe pas pour les audiosources. Tu dois régler cela avec le mode Loop. Ici, il faudrait que ton clip/audiosource aient le Loop active de base. La fonction PlayOneShot () te permettra de le jouer qu'une seule fois même s'il est en Loop.
Egalement, tu n'es pas obligé à chaque fois de réaffecter le clip puisque c'est le même. Et par convention, les variables commencent par une minuscule, les classes et les fonctions par une Majuscule.
Ça te permet de ne pas nommer une variable comme une classe par inadvertance et d'avoir plus de lisibilité.

-EDIT- j'ai vraiment la tête ailleurs moi, j'avais même pas capter que c'était un lecteur... (Play, Stop, Loop)
"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

korwinnn
Messages : 35
Inscription : 10 Juin 2015 10:53

Re: Script de contrôle d'animation pour vuforia

Message par korwinnn » 14 Juin 2017 12:04

Merci evereal c'est le genre de petite erreur qui ne pardonne pas !
Boubouk50 merci à toi aussi, ne t'inquiète pas, possible que je n'ai pas été très clair non plus dans mon descriptif initial.
En ayant modifié le script selon vos conseils la console m'indique cette fois:
cs(13,3) error CS1525: Un expected symbol 'audio '
la ligne 13 correspond à la dernière ligne (audio.clip = monSon;)

Code : Tout sélectionner

 private Animation anim;
   private AudioSource audio;
   public AudioClip monSon;

   void Start() {
      anim = this.transform.GetComponent<Animation> ();
      audio =  this.transform.GetComponent<Audiosource> ();
      audio.clip = monSon;
   }

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

Re: Script de contrôle d'animation pour vuforia

Message par boubouk50 » 14 Juin 2017 12:17

Bon, là c'est plus de la compréhension de fonctionnement qu'autre chose:
this représente le gameObject qui possède ce script.
this.transform c'est le transform de ce gameObject.
this.transform.GetComponent<Audiosource> (); c'est l'AudioSource de ce gameObject;
audio = this.transform.GetComponent<Audiosource> (); tu récupères donc l'AudioSource de ce gameObject pour le stocker dans ta variable audio.
Si l'AudioSource n'est pas trouvé (car le gameObject ne possède pas d'AudioSource) alors la variable audio est vide.
De ce fait à la ligne suivante:
audio.clip = monSon; n'est pas possible puisque audio ne contient pas d'AudioSource, donc le programme ne sait pas quoi faire.
Deux solutions:
Tu mets l'AudioSource sur le GameObject qui possède ce script ou bien tu mets ta variable AudioSource publique et tu vas la chercher à la main depuis l'Inspector.

Egalement, vu que j'étais à côté de ce que tu voulais faire, pas besoin d'aller chercher l'audio Clip, tu peux le mettre en défaut dans l'AudioSource dans l'Inspector, ce sera uniquement lui qui sera joué normalement. Tu peux donc supprimer toutes les lignes où monSon apparaît.
"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

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: Script de contrôle d'animation pour vuforia

Message par simonj » 14 Juin 2017 12:34

evereal a écrit :

Code : Tout sélectionner

private Audiosource audio;
AudioSource
Ca s'applique aussi ici :
korwinnn a écrit : [...]

Code : Tout sélectionner

      audio =  this.transform.GetComponent<Audiosource> ();
      
[...]

Répondre

Revenir vers « Scripting »