[RESOLU][DB] Son non joué sur un GameObject

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Nakline
Messages : 5
Inscription : 13 Mai 2017 13:13

[RESOLU][DB] Son non joué sur un GameObject

Message par Nakline » 13 Mai 2017 13:33

Bonjour à tous,

Je débute sur Unity et j'essaie de faire un script pour récupérer des pièces et jouer un son. Mais le problème est que quand j'exécute le script ci-dessous, la pièce disparaît et le score augmente mais le son n'est pas joué et si j'enlève le Destroy(gameObject); le son est joué mais le GameObject ne disparaît alors pas.

Si vous pouviez me dire où est mon erreur svp,

Merci d'avance.

Code : Tout sélectionner

private var score : Score;
var sound : AudioClip;
private var hasPlayed = false;

function Start () {
    score = GameObject.FindGameObjectWithTag("Player").GetComponent(Score);
}

function OnTriggerEnter2D (other : Collider2D){

    if(other.tag == "Player"){

        score.coins += 1;
       
        if(hasPlayed == false) {
            GetComponent.<AudioSource>().PlayOneShot(sound);
            hasPlayed = true;
        } 
        Destroy(gameObject);
       
    }
}
Dernière édition par Nakline le 13 Mai 2017 14:19, édité 1 fois.

Avatar de l’utilisateur
Drakulo
Messages : 113
Inscription : 10 Mars 2017 22:49
Contact :

Re: [DB] Son non joué sur un GameObject

Message par Drakulo » 13 Mai 2017 13:53

Hello.

La raison est très simple : le composant AudioSource qui lit ton son est attaché au même GameObject que tu détruits juste après. Dans ton cas de figure, il faut spawn un nouveau GameObject auquel tu auras attaché ton Audio Source au moment de la destruction de ta pièce. Comme ça ta pièce est détruite, mais le son sera quand même joué. Pense bien à supprimer le GameObject qui joue le son une fois que tu n'en as plus besoin !
Fun Games Maker @TriplArt
Coach à esprit UNITY : Finissez vos jeux, vivez de votre passion
Enseignant de programmation / Unity3D à Bellecour Ecole

Nakline
Messages : 5
Inscription : 13 Mai 2017 13:13

Re: [DB] Son non joué sur un GameObject

Message par Nakline » 13 Mai 2017 14:16

Effectivement je n'y avais pas pensé merci beaucoup !
Et sinon ce n'est pas possible de le faire sur un seul GameObject ?

Avatar de l’utilisateur
Drakulo
Messages : 113
Inscription : 10 Mars 2017 22:49
Contact :

Re: [RESOLU][DB] Son non joué sur un GameObject

Message par Drakulo » 13 Mai 2017 15:15

Techniquement, oui tu peux. Il faudrait désactiver tous les autres composants de ton GameObject mis à part l'AudioSource. Puis dans un second temps, quand le son est terminé, tout simplement détruire le GameObject.

;-)
Fun Games Maker @TriplArt
Coach à esprit UNITY : Finissez vos jeux, vivez de votre passion
Enseignant de programmation / Unity3D à Bellecour Ecole

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

Re: [DB] Son non joué sur un GameObject

Message par Max » 13 Mai 2017 15:20

Hello,

sinon, autre solution, tu peux tenter de renseigner le paramètre optionnel 't' de Destroy(), qui correspond à un délais avant destruction, qui pourrait être équivalent à la durée de ton son (légèrement au dessus évidement).
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

Nakline
Messages : 5
Inscription : 13 Mai 2017 13:13

Re: [DB] Son non joué sur un GameObject

Message par Nakline » 13 Mai 2017 15:29

Max a écrit :Hello,

sinon, autre solution, tu peux tenter de renseigner le paramètre optionnel 't' de Destroy(), qui correspond à un délais avant destruction, qui pourrait être équivalent à la durée de ton son (légèrement au dessus évidement).
Merci beaucoup, j'ai trouvé et effectivement c'est bon !

Nakline
Messages : 5
Inscription : 13 Mai 2017 13:13

Re: [DB] Son non joué sur un GameObject

Message par Nakline » 13 Mai 2017 16:00

Max a écrit :Hello,

sinon, autre solution, tu peux tenter de renseigner le paramètre optionnel 't' de Destroy(), qui correspond à un délais avant destruction, qui pourrait être équivalent à la durée de ton son (légèrement au dessus évidement).
Cette solution marche mais par contre maintenant j'ai un autre problème, c'est que quand je veux ramasser une pièce, cela m'ajoute dès fois 2 au score. Je pense que cela viens du fait que le GameObject mette 0.2 seconde à se détruire mais je ne suis pas sur.
Auriez vous une solution à ce problème ?

Cordialement,

(Voici le code)

Code : Tout sélectionner

private var score : Score;
var sound : AudioClip;
private var hasPlayed = false;

function Start () {
    score = GameObject.FindGameObjectWithTag("Player").GetComponent(Score);
}

function OnTriggerEnter2D (other : Collider2D){

    if(other.tag == "Player"){

        if(hasPlayed == false) {
            GetComponent.<AudioSource>().PlayOneShot(sound);
            hasPlayed = true;
        } 

        Destroy(gameObject,0.2f);
        score.coins += 1;
       
    }
}

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

Re: [RESOLU][DB] Son non joué sur un GameObject

Message par Max » 13 Mai 2017 16:26

Le problème avec les Destroy() différés, c'est qu'avant d'être démembré, ton GO reste actif, donc je suppose que ton soucis vient de là. Comme le conseillait Drakulo, désactiver certains component pourrait être une solution.
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

Nakline
Messages : 5
Inscription : 13 Mai 2017 13:13

Re: [RESOLU][DB] Son non joué sur un GameObject

Message par Nakline » 13 Mai 2017 16:37

Max a écrit :Le problème avec les Destroy() différés, c'est qu'avant d'être démembré, ton GO reste actif, donc je suppose que ton soucis vient de là. Comme le conseillait Drakulo, désactiver certains component pourrait être une solution.
D'accord merci beaucoup !

Verrouillé

Revenir vers « (Js) Javascript »