Garder des objets en mémoire de Scène en Scène

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
Avatar de l’utilisateur
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Garder des objets en mémoire de Scène en Scène

Message par kealkeal » 28 Oct 2015 11:13

Bonjour,

Dans mon Projet j'ai 2 Scènes.

La scène 1 contient les objets A, B et C qui sont cachés par défaut.

Lorsque j'appuie sur une touche du clavier, alors les objets : A, B et C apparaissent dans la Scène 1.

J'accède maintenant à ma Scène 2.

Si je retourne dans ma Scène 1 alors les objets A, B et C sont invisibles.

Comment puis je faire en sorte qu'il soient visibles lors de mon retour de la Scène 2 ? :?

J'ai vu la fonction DontDestroyOnLoad mais cette fonctionne affiche les objets A, B et C lorsque je suis dans la Scène 2.

J'ai vu la fonction PlayerPrefs mais je ne comprends comment elle fonctionne.

Merci pour votre aide. ;-)
Dernière édition par kealkeal le 28 Oct 2015 11:31, édité 1 fois.
kealkeal

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

Re: Garder des objets en mémoire de Scène en Scène

Message par boubouk50 » 28 Oct 2015 11:25

La fonction DontDestroyOnLoad() peut s'appliquer aussi à des GameObjects qui ne servent que de support de script.
Tu mets un script sur un gameObject vide qui gère les objets des différentes scènes. Quand ton objet A, B ou C s'affiche, ton script reçoit l'info et la conserve. Ensuite, quand vas et viens de scène en scène, à chaque Start () de ta scène tu vas vérifier l'état des tes objets A, B et C et tu fais en fonction.
Tu peux également utiliser les playerPrefs, il te faut enregistrer les états dans des variables et les récupérer également au Start (). Il te faut également gérer le cas du premier lancement.
PlayerPrefs est très simple à utiliser: tu fais un SetXX (nom de la donnée, valeur de la donnée) pour stocker une donnée, et un GetXX (nom de la donnée) pour la récupérer.
"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
kealkeal
Messages : 925
Inscription : 16 Juil 2010 17:31
Localisation : Paris

Re: Garder des objets en mémoire de Scène en Scène

Message par kealkeal » 28 Oct 2015 11:33

Euh ... ouais je vois bien l'idée ... mais le code à mettre en place ... c'est le brouillard :cry:

Saurais tu me faire un script simple pour que je puisse comprendre le principe.

PS : Je suis pas codeur ... CQFD mais je me soigne !! :lol:
kealkeal

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Garder des objets en mémoire de Scène en Scène

Message par Xann_71 » 28 Oct 2015 11:38

Salut alors j'ai peut être une solution à te proposer. Par contre sa ressemble à du bricolage (oui j'aime beaucoup le bricolage^^').
Tu devrais essayer d'utiliser des variables booléennes publiques pour gérer l'activation ou la désactivation de tes objets:

Code : Tout sélectionner

public var activeA: boolean = false;
public var activeB: boolean = false;
public var activeC: boolean = false;
Ensuite tu fais un test dans ton update() pour chaque booléen: si (activeA = true) alors (MonObjetA.enabled = true) sinon si (activeA = false) alors (MonObjetA.enabled = false).
Sauf erreur de ma part, le booléen public restera stocké même si tu sors de ta scène et quand tu reviens dedans il redonne l'état souhaité à ton objet.

Je n'ai pas encore testé cette méthode mais sa devrait marcher.

PS: mes variables sont déclarée pour du js, si tu utilise un autre langage, redéclare les ne fais pas un copier/coller ;)

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

Re: Garder des objets en mémoire de Scène en Scène

Message par boubouk50 » 28 Oct 2015 11:51

Oula du calme!
Bidouiller c'est sympa mais là, ça ne va pas du tout!
1/ l'Update () n'est pas un fourre tout! Il est appelé à chaque frame, donc à chaque frame il fait des calculs, donc il faut limiter le nombre de calculs inutiles. Vérifier l'état d'un booléen à chaque frame est inutile. Il faut une fonction qui change l'état au moment où on veut qu'il change
2/ Faites un peu de logique: Si B == true alors A = true sinon Si B == false alors A = false. Un booléen a 2 états, donc si c'est pas l'un c'est l'autre, on fait sauter la 2e condition avec un else. Vous pouvez aussi remarquer que dans les 2 cas A vaut B. Donc tout se résume à: A = B.
3/ Une variable publique est détruite entre chaque scène si l'objet qui possède le script est détruit, d'où la nécessité d'un DontDestroyOnLoad ()

Au Start () de ta scène, tu vas chercher l'état de tes objets -> booléen stocké ->

Code : Tout sélectionner

MyGameObject.SetActive (booléen stocké).
Faire une fonction qui change l'état de ton gameObject et qui stocke son état->

Code : Tout sélectionner

MyGameObject.SetActive (!MyGameObject.activeSelf);
booléen stocké = MyGameObject.activeSelf //va voir la doc pour le activeSelf
Et c'est tout!
Pour le booléen stocké, soit tu passes par une variable dans un script qui ne se détruit pas, initialisée avec l'état de départ, soit tu passes par les PlayerPrefs.
"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

Xann_71
Messages : 93
Inscription : 23 Juin 2015 22:25
Localisation : Le puy en velay

Re: Garder des objets en mémoire de Scène en Scène

Message par Xann_71 » 28 Oct 2015 11:58

Ok merci pour l'info Boubouk, c'est vrai que j'en suis encore à l'étape bidouillage mais j'espère bien progresser d'ici quelques semaines en jetant un oeil à un maximum de sujets.

Verrouillé

Revenir vers « (Js) Javascript »