[DB] comment fonctionne Audiosource.Play() ?

Questions à propos de la partie audio, y compris les problèmes de script s'y rapportant.
Evane
Messages : 12
Inscription : 30 Mai 2018 09:30

[DB] comment fonctionne Audiosource.Play() ?

Message par Evane » 16 Juin 2018 13:23

sans doute que je n'ai pas bien compris comment on l'utilise..

Je tente de mettre des bruits de pas quand le joueur se déplace (1st person)
J'ai mis un component "Audiosource" sur mon joueur, avec un AudioClip d'un pas en MP3, et décoché "play on awake"
j'ai mis dans le script du joueur:

Code : Tout sélectionner

 public float speed = 10.0F;
   AudioSource myaudio;
    void Start()
    {
        myaudio = GetComponent<AudioSource>();
    }
    void Update()
    {
        float translation = Input.GetAxis("Vertical") * speed * Time.deltaTime;
        float straffe = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
       
        if ((translation != 0) || (straffe != 0))
        {
            myaudio.Play();
        }
        transform.Translate(straffe, 0, translation);
           }
mais bizarrement, c'est uniquement quand le joueur arrête de marcher que j'entend un bruit de pas...

j'ai aussi fait un autre essai de son:

j'ai un objet "clé" qui disparait quand on l'approche, et je voudrais jouer un son "ping"
J'ai mis un component "Audiosource" sur ma clé, avec un AudioClip du son en MP3, et décoché "play on awake"
puis le code suivant sur ma clé:

Code : Tout sélectionner

    AudioSource myaudio; 
      void Start()
    {
        myaudio = GetComponent<AudioSource>();
    }
  private void OnTriggerEnter(Collider other)
    {
       myaudio.Play();   
        gameObject.SetActive(false);
    }
la clé disparait mais le son ne se joue pas..

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

Re: [DB] comment fonctionne Audiosource.Play() ?

Message par boubouk50 » 16 Juin 2018 15:05

Salut,
Alors tout bêtement, tu joues (Play) le son à chaque fois que tu bouges. C'est comme si tu faisais la même chose sur un lecteur. Play, play, play, etc. Le son recommence sans jamais se jouer. C'est donc quand tu arrêtes de jouer le son qu'il peut finalement se jouer.
Il te faut utiliser myaudio.isPlaying pour savoir si le son se joue pour ne pas le recommencer. Aussi quand tu ne bouges plus, tu peux stopper le son. myaudio.Stop ().
Pour la clé, tu desactives le gameObjext, donc ses components, donc son son. Tu peux désactiver le meshrenderer pour empêcher l'affichage sinon.
"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

Evane
Messages : 12
Inscription : 30 Mai 2018 09:30

Re: [DB] comment fonctionne Audiosource.Play() ?

Message par Evane » 16 Juin 2018 17:28

Merci, IsPlaying et Stop quand on ne bouge plus marchent très bien :

Code : Tout sélectionner

if ((translation == 0) && (straffe == 0))
        {
            myaudio.Stop();
        }
        else if (!myaudio.isPlaying)
        {
            myaudio.Play();
        }
par contre le bruit de pas est un peu trop rapide, il y a moyen d'ajouter un peu de blanc sans modifier le mp3?

et pour la clé ca marche aussi, j'ai même mis un destroy derriere avec délai pour que ca ne coupe pas le son:

Code : Tout sélectionner

    private AudioSource myaudio;
    private Renderer rend;
    void Start()
    {
        myaudio = GetComponent<AudioSource>();
        rend = GetComponent<Renderer>();
    }
    private void OnTriggerEnter(Collider other)
    {
         myaudio.Play();
         rend.enabled = false;
         Destroy(gameObject, myaudio.clip.length);

    }
On peut donc voir un AudioSource comme un lecteur de cassette, et Audioclip la cassette qui est dedans, et faire play et stop à la demande, avec une loop pour jouer en boucle si necessaire.
Seulement comment faire si on veut changer de cassette, il n'y a qu'un emplacement pour mettre le AudioClip? on ne peut pas utiliser plusieurs audiosource, non?(par ex pour une porte qui a un grincement à l'ouverture et un claquement à la fermeture).
j'ai vu qu'il existe aussi une fonction PlayOneShot, alors que vaut-il mieux utiliser et dans quel cas?
audioSource.PlayOneShot(myclip2, 0.1F);
ou
audio.clip = myclip2;
audio.Play();

mais avec PlayOneShot l'audioclip vient de l'exterieur et n'est plus stocké dans l'objet? Il n'y a pas moyen de garder les différents sons de l'objet dans un de ses component comme un rack de cassettes pour les retrouver plus facilement?

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB] comment fonctionne Audiosource.Play() ?

Message par Max » 16 Juin 2018 18:57

Evane a écrit :
16 Juin 2018 17:28
Seulement comment faire si on veut changer de cassette, il n'y a qu'un emplacement pour mettre le AudioClip? on ne peut pas utiliser plusieurs audiosource, non?
tu peux par exemple définir un tableau qui contiendra tous les clip dont tu as besoin. Par exemple

Code : Tout sélectionner

    [SerializeField]
    AudioClip[] clips;
   // ou
    public AudioClip[] clips;
Tu dimensionne et alimente ton tableau via l'inspector, et dans ton code, il te suffit en suite d'affecter à ton audiosource le clip désiré: audio.clip = clips[n];.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Evane
Messages : 12
Inscription : 30 Mai 2018 09:30

Re: [DB] comment fonctionne Audiosource.Play() ?

Message par Evane » 16 Juin 2018 20:28

ah oui, bien pratique, je ne pensais pas qu'on pouvait mettre un array en Public.
Comme ça j'ai tous mes AudioClips sous les yeux dans l'inspector sans m'y perdre.

Et pour l'utilisation de play ou PlayOneShot?

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB] comment fonctionne Audiosource.Play() ?

Message par Max » 17 Juin 2018 13:39

Evane a écrit :
16 Juin 2018 20:28
Et pour l'utilisation de play ou PlayOneShot?
PlayOneShot te permet de jouer un son (avec un controle direct du volume) avec en paramètre une référence à un AudioClip. Pour des sons ponctuels et variés, liés à un même gameobject, c'est certainement d'une utilisation intéressante.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Audio, musique et sons »