DontDestroyOnLoad pour une musique.[Résolut]

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
cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

DontDestroyOnLoad pour une musique.[Résolut]

Message par cortoh » 01 Mai 2015 17:33

Bonjour,
J'ai une scène qui comporte un plateau et des pions, quand un pion sort du plateau, je recharge la scène avec

Code : Tout sélectionner

Application.LoadLevel(1);
cela dit j'ai la musique du jeu en cours qui recommence depuis le début, j'aurais souhaité quelle ne soit pas interrompue lors du nouveau chargement de la scène.
J'ai après quelques essais tenté d'appliquer un

Code : Tout sélectionner

DontDestroyOnLoad(myMusic);
dans un Awake, cela semble fonctionner la musique continue effectivement mais une seconde est relancée par dessus.
Pouvez vous me dire comment remédier à ce problème.
Merci à vous.
Dernière édition par cortoh le 02 Mai 2015 17:13, édité 1 fois.

Avatar de l’utilisateur
Montmorency
Messages : 55
Inscription : 01 Mai 2015 15:28

Re: DontDestroyOnLoad pour une musique.

Message par Montmorency » 01 Mai 2015 17:42

Bonjour,

Je te conseille de créer un gameObject "Musique" avec ta musique dedans ensuite tu le sauvegarde dans un prefab et tu le supprime de ta scène.

Puis avec un script tu déclare en public une variable GameObject ou tu met ton prefab "Musique" et le DontDestroyOnLoad(gameObject); dans Start ()

Dans la partie Awake d'un nouveau script tu fait une condition pour recherche si ton GameObject "Musique" est présent si oui tu fait rien si non tu invoque ton gameObject.

Cordialement !

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: DontDestroyOnLoad pour une musique.

Message par cortoh » 01 Mai 2015 22:17

Bonjour et merci pour ta réponse Montmorency,
J'ai tout mis en place mais je rame un peu sur cette partie:
Dans la partie Awake d'un nouveau script tu fait une condition pour recherche si ton GameObject "Musique" est présent si oui tu fait rien si non tu invoque ton gameObject.
tu peux me montrer un exemple ?

Avatar de l’utilisateur
Montmorency
Messages : 55
Inscription : 01 Mai 2015 15:28

Re: DontDestroyOnLoad pour une musique.

Message par Montmorency » 01 Mai 2015 22:32

Avec grand plaisir ;)

Code : Tout sélectionner

	public GameObject musique;
	void Awake () {
		if (!GameObject.Find("Musique")) {
			Instantiate (musique);
		}
	} 
http://docs.unity3d.com/ScriptReference ... .Find.html
http://docs.unity3d.com/ScriptReference ... tiate.html

Tout simplement ;)

Tout est dans la doc de Unity (je te met les liens). J'espère que tu en prendras connaissance. Car tu apprendra pas si je te sert tout les codes sur un plateau !

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: DontDestroyOnLoad pour une musique.

Message par cortoh » 02 Mai 2015 08:16

J'ai terminé la mise en place mais ça ne fonctionne pas, la musique est toujours relancée depuis le début.
Si je suis la logique, au premier lancement le GameObject "musique" n'est pas dans la scène car pas instancié, la fonction Awake va donc nous l'importer et dans la fonction Start on stipule qu'on doit garder ce GameObject lors d'un nouveau chargement de la scène.

Code : Tout sélectionner

public var musique : GameObject; // ici j'ai glissé mon Prefab "Music"

function Awake () 
{
if (!musique.Find("Music"))
{
Instantiate (musique);
}
}

function Start()
{
 DontDestroyOnLoad(musique);
}

Avatar de l’utilisateur
Montmorency
Messages : 55
Inscription : 01 Mai 2015 15:28

Re: DontDestroyOnLoad pour une musique.

Message par Montmorency » 02 Mai 2015 10:03

Bonjour donc non faut pas que ça soit dans le même script donc dans ton gameObject musique tu met ce code la

Code : Tout sélectionner

function Start()
{
 DontDestroyOnLoad(gameObject);
}
et dans un autre script qui cette fois est dans un gameObject présent tout le temps dans ta scène tu met ce code pour vérifier la présence de ton object

Code : Tout sélectionner

public var musique : GameObject; // ici j'ai glissé mon Prefab "Music"

function Awake () 
{
if (!musique.Find("Music"))
{
Instantiate (musique);
}
}
Enfaite il ne faut pas qu'il soit dans le même script car tu ne peux instancier ton propre script et j'ai oublier une petite précision. Il faut que tu rajoute "(Clone)" dans ton code Find car quand tu instancie un object, Unity rajoute toujours (Clone) donc pour ton cas musique.Find("Music(Clone)")

Normalement tout devrais fonctionner !
Cordialement

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: DontDestroyOnLoad pour une musique.

Message par cortoh » 02 Mai 2015 11:16

Salut,
Désolé malgré les modifications apportées la musique recommence toujours depuis le début ?! elle est instanciée à chaque chargement de la scène, il se pourrait que le "DontDestroyOnLoad" n'agit pas.

Avatar de l’utilisateur
Montmorency
Messages : 55
Inscription : 01 Mai 2015 15:28

Re: DontDestroyOnLoad pour une musique.

Message par Montmorency » 02 Mai 2015 12:36

J'ai fais un vidéo rien que pour toi pour t'expliquer comment le faire simplement ;)
http://www.youtube.com/watch?v=D6jTUOgARo0

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: DontDestroyOnLoad pour une musique.[Résolut]

Message par cortoh » 02 Mai 2015 16:27

Vraiment super la réponse en vidéo, j'avais effectivement 2 manquements pour y arriver, il y avait bien sûr le

Code : Tout sélectionner

!GameObject
que j'avais remplacé par la variable croyant pertinemment aller dans le bon sens et pour finir je n'avait pas intégré le script directement dans le Prefab pensant que je pouvais utiliser le

Code : Tout sélectionner

DontDestroyOnLoad(gameObject);
en utilisant toujours cette fameuse variable "musique".
Gros merci pour cette réponse pédagogique ça fonctionne nickel !
Dernière édition par cortoh le 02 Mai 2015 17:12, édité 1 fois.

Avatar de l’utilisateur
Montmorency
Messages : 55
Inscription : 01 Mai 2015 15:28

Re: DontDestroyOnLoad pour une musique.

Message par Montmorency » 02 Mai 2015 16:34

Mais de rien ;)

Pense à rajouter [Résolut] à ton titre est bon code !

Verrouillé

Revenir vers « (Js) Javascript »