Multi scène
Multi scène
Bonjour à tous,
Après plusieurs mois d'absence me revoilà avec un grand besoin d'aide.
J'ai l'intention de créer un jeu d'énigmes et réflexions dans un domaine fermé genre château ou tour.
J'ai imaginé un lieu composé d'une trentaine de salles. Chaque salle comprend un sas dans lequel une petite énigme permet de débloquer la porte pour accéder à la pièce principale qui contient une énigme pour récupérer un objet qui permettra de reconstituer, dans l'entrée un arbre que j'appelle "L'arbre de la liberté" dont le but du jeu est de le compléter.
J'ai commencé à créer mon jeu dans une scène unique, mais je réalise que très vite la scène va devenir énorme et risque de compromettre le bon fonctionnement du jeu.
Je pense qu'il sera plus astucieux de créer une scène par salle à visiter.
Mon soucis est, malgré les recherches que j'ai pu faire sur internet de pouvoir naviguer d'une scène à l'autre avec fluidité en ouvrant une porte pour entrer dans une nouvelle scène, une fois à l'intérieur la scène précédente est 'unloadée', et vice-versa, pour ressortir de la pièce avec l'objet récupéré.
Est-ce que quelqu'un peut me guider vers une piste à suivre pour régler ces difficultés
A savoir que j'ai commencé mon projet en utilisant une seule scène et en désactivant toutes les salles hors de celle que le player occupe. Peut-être que cette solution n'est pas si mauvaise que ça. En tout cas cette méthode est plus facile à gérer pour moi.
merci de votre aide
Après plusieurs mois d'absence me revoilà avec un grand besoin d'aide.
J'ai l'intention de créer un jeu d'énigmes et réflexions dans un domaine fermé genre château ou tour.
J'ai imaginé un lieu composé d'une trentaine de salles. Chaque salle comprend un sas dans lequel une petite énigme permet de débloquer la porte pour accéder à la pièce principale qui contient une énigme pour récupérer un objet qui permettra de reconstituer, dans l'entrée un arbre que j'appelle "L'arbre de la liberté" dont le but du jeu est de le compléter.
J'ai commencé à créer mon jeu dans une scène unique, mais je réalise que très vite la scène va devenir énorme et risque de compromettre le bon fonctionnement du jeu.
Je pense qu'il sera plus astucieux de créer une scène par salle à visiter.
Mon soucis est, malgré les recherches que j'ai pu faire sur internet de pouvoir naviguer d'une scène à l'autre avec fluidité en ouvrant une porte pour entrer dans une nouvelle scène, une fois à l'intérieur la scène précédente est 'unloadée', et vice-versa, pour ressortir de la pièce avec l'objet récupéré.
Est-ce que quelqu'un peut me guider vers une piste à suivre pour régler ces difficultés
A savoir que j'ai commencé mon projet en utilisant une seule scène et en désactivant toutes les salles hors de celle que le player occupe. Peut-être que cette solution n'est pas si mauvaise que ça. En tout cas cette méthode est plus facile à gérer pour moi.
merci de votre aide
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
- boubouk50
- ModoGenereux
- Messages : 6243
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Multi scène
Le chargement et déchargement asynchrone de scène.
L'idée serait de charger la scène de façon asynchrone dès que tu arrives dans une zone Trigger avant la porte pour que tu sois sûr qu'elle soit chargée au moment d'ouvrir la porte.
Pareil pour le déchargement, à l'inverse.
https://docs.unity3d.com/ScriptReferenc ... Async.html
L'idée serait de charger la scène de façon asynchrone dès que tu arrives dans une zone Trigger avant la porte pour que tu sois sûr qu'elle soit chargée au moment d'ouvrir la porte.
Pareil pour le déchargement, à l'inverse.
https://docs.unity3d.com/ScriptReferenc ... Async.html
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Multi scène
Merci Boubouk,
En effet je peux utiliser cette méthode mais en utilisant un clic sur la porte et attendre que la scène soit chargée avant de l'ouvrir.
Mais voilà, j'ouvre la porte, le Player entre dans la salle la porte se referme et je décharge la scène précédente. Du coup la porte disparait.
Je crée donc une porte dans ma salle pour cacher le trou. Mais au retour, je clique sur ma porte, la scène précédente se recharge la porte de la pièce que j'occupe s'ouvre, mais la porte de la scène précédente est fermée.
c'est un cercle vicieux que je n'arrive pas à régler. Avec une double porte il y a toujours une porte fermée, une porte simple disparait....
Ca m'ennuie un peut de rentre les porte DontDestroyOnLoad, mais si c'est la seule solution !!!
J'ai essayé de mettre mes portes en double pour les manipuler en même temps dans un manager 'Persistant' mais je n'arrive pas à lister les portes des autres scènes...
En effet je peux utiliser cette méthode mais en utilisant un clic sur la porte et attendre que la scène soit chargée avant de l'ouvrir.
Mais voilà, j'ouvre la porte, le Player entre dans la salle la porte se referme et je décharge la scène précédente. Du coup la porte disparait.
Je crée donc une porte dans ma salle pour cacher le trou. Mais au retour, je clique sur ma porte, la scène précédente se recharge la porte de la pièce que j'occupe s'ouvre, mais la porte de la scène précédente est fermée.
c'est un cercle vicieux que je n'arrive pas à régler. Avec une double porte il y a toujours une porte fermée, une porte simple disparait....
Ca m'ennuie un peut de rentre les porte DontDestroyOnLoad, mais si c'est la seule solution !!!
J'ai essayé de mettre mes portes en double pour les manipuler en même temps dans un manager 'Persistant' mais je n'arrive pas à lister les portes des autres scènes...
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
- boubouk50
- ModoGenereux
- Messages : 6243
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Multi scène
Tu n'es pas obligé de décharger la scène précédente.
Tu peux aussi faire des scènes intermédiaires qui ne contiennent que les assets qui doivent être partagés entre plusieurs scènes.
Souvent, dans les jeux, tu as une zone tampon entre 2 grandes pièces (couloir, sas, petite pièce fermée, etc). Ce n'est pas anodin. Quand tu es dans une pièce, tu as ses zones tampons adjacentes chargées. Tu es donc obligé de passer par cette zone pour aller dans une autre pièce. Quand tu passes dans une nouvelle pièce, l'ancienne pièce est déchargée, mais la zone tampon, elle, reste (puisque adjacente aussi et donc partagée entre deux ou plusieurs pièces). Cette zone tampon contient la ou les portes.
Dans ton cas, ça peut être un escalier, un couloir, un détour, un petit passage caché, une petite pièce intermédiaire.
Tout ceci fait partie du Level Design.
Tu peux aussi faire des scènes intermédiaires qui ne contiennent que les assets qui doivent être partagés entre plusieurs scènes.
Souvent, dans les jeux, tu as une zone tampon entre 2 grandes pièces (couloir, sas, petite pièce fermée, etc). Ce n'est pas anodin. Quand tu es dans une pièce, tu as ses zones tampons adjacentes chargées. Tu es donc obligé de passer par cette zone pour aller dans une autre pièce. Quand tu passes dans une nouvelle pièce, l'ancienne pièce est déchargée, mais la zone tampon, elle, reste (puisque adjacente aussi et donc partagée entre deux ou plusieurs pièces). Cette zone tampon contient la ou les portes.
Dans ton cas, ça peut être un escalier, un couloir, un détour, un petit passage caché, une petite pièce intermédiaire.
Tout ceci fait partie du Level Design.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Multi scène
Bonjour,
as-tu essayé avec une scène principale (disons le couloir d'accès aux différentes salles) et avec une scène par salle chargée avec LoadSceneMode.Additive et déchargée avec UnloadScene ?
as-tu essayé avec une scène principale (disons le couloir d'accès aux différentes salles) et avec une scène par salle chargée avec LoadSceneMode.Additive et déchargée avec UnloadScene ?
Re: Multi scène
Voilà ce que j'ai imaginé :
Une scène manager dans lequel j'ai le script manager du jeu et le player. Dans cette scène il y aura aussi les autres objets persistants.
Au démarrage il y aura la scène manager qui chargera la scène 0 qui est en fait la première pièce du jeu et qui contiendra 'L'arbre de la liberté' à reconstituer. Cette pièce donnera accès à une scène Elévateur. Quand le joueur cliquera sur la porte
ça activera l'Elevateur et une fois dans l'élévateur la scène 0 se déchargera
Il y aura donc, la scène Elévateur qui donnera accès à toutes les pièces.
Normalement il n'y aura que la scène Manager en permanence et une autre scène en cours qui seront visibles.
Je pensais possible pour les portes de créer une liste de valeurs représentant la position des portes de l'Elévateur pour les enregistrer avant de désactiver ls scène Elévateur et repositionner les portes à la réactivation de l'Elévateur.
Est-ce possible ?
Une scène manager dans lequel j'ai le script manager du jeu et le player. Dans cette scène il y aura aussi les autres objets persistants.
Au démarrage il y aura la scène manager qui chargera la scène 0 qui est en fait la première pièce du jeu et qui contiendra 'L'arbre de la liberté' à reconstituer. Cette pièce donnera accès à une scène Elévateur. Quand le joueur cliquera sur la porte
ça activera l'Elevateur et une fois dans l'élévateur la scène 0 se déchargera
Il y aura donc, la scène Elévateur qui donnera accès à toutes les pièces.
Normalement il n'y aura que la scène Manager en permanence et une autre scène en cours qui seront visibles.
Je pensais possible pour les portes de créer une liste de valeurs représentant la position des portes de l'Elévateur pour les enregistrer avant de désactiver ls scène Elévateur et repositionner les portes à la réactivation de l'Elévateur.
Est-ce possible ?
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
- boubouk50
- ModoGenereux
- Messages : 6243
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Multi scène
Tout est possible, d'une certaine manière.
Tu es dans un environnement virtuel, facile de tricher.
Si ton élévateur est complètement fermé, alors le déplacement peut simplement être simulé et TOUTES tes pièces sont au même endroit. Il suffirait donc de charger la bonne scène et d'ouvrir les portes une fois celle-ci chargée, par exemple.
Tu es dans un environnement virtuel, facile de tricher.
Si ton élévateur est complètement fermé, alors le déplacement peut simplement être simulé et TOUTES tes pièces sont au même endroit. Il suffirait donc de charger la bonne scène et d'ouvrir les portes une fois celle-ci chargée, par exemple.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Multi scène
Ha oui, je ne l'avais pas pensé comme ça.
En fait, mon élévateur reste en place et je déplace la colonne élévateur pour donner l'illusion de déplacement. A la fin du déplacement et je réinitialise les positions et je recommence si nécessaire.
Très bien.
Donc là une seule porte est nécessaire.
Le joueur clique sur la porte, je charge la scène, et dès qu'elle est chargée j'ouvre la porte.
Le joueur entre dans la pièce et dès qu'il s'éloigne de la porte, je décharge l'ascenseur.
La porte de l'ascenseur est un objet persistant, plus de problème de porte ouverte ou fermée.
Nickel pour cette étape.
Au démarrage, je voudrais que seules soient chargées la scène Manager et la Scene_0 ou la scène spécifiée.
Mon soucis est que soit j'ai des scènes en double soit j'ai un démarrage infini et je suis obliger d'arrêter Unity, selon la scène que j'édite. Pourrais avoir quelques conseils pour gérer ceci ?
En fait, mon élévateur reste en place et je déplace la colonne élévateur pour donner l'illusion de déplacement. A la fin du déplacement et je réinitialise les positions et je recommence si nécessaire.
Très bien.
Donc là une seule porte est nécessaire.
Le joueur clique sur la porte, je charge la scène, et dès qu'elle est chargée j'ouvre la porte.
Le joueur entre dans la pièce et dès qu'il s'éloigne de la porte, je décharge l'ascenseur.
La porte de l'ascenseur est un objet persistant, plus de problème de porte ouverte ou fermée.
Nickel pour cette étape.
Au démarrage, je voudrais que seules soient chargées la scène Manager et la Scene_0 ou la scène spécifiée.
Mon soucis est que soit j'ai des scènes en double soit j'ai un démarrage infini et je suis obliger d'arrêter Unity, selon la scène que j'édite. Pourrais avoir quelques conseils pour gérer ceci ?
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
- boubouk50
- ModoGenereux
- Messages : 6243
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Multi scène
Il nous faut savoir comment tu charges les scènes. Tu dois avoir une boucle ou un script qui est appelé à chaque chargement qui charge une nouvelle scène, et c'est la boucle infinie.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Multi scène
Alors voilà :
J'avais mis ce script dans toute les scènes de façon à ce qu'il démarre la scène Manager à chaque démarrage.
J'ai compris que si au démarrage de Manager j'avais la scene_start déjà activée j'avais une boucle infinie.
Je pensais que le SceneManager.LoadScene éliminait toutes les scènes présentes.
J'ai donc supprimé ce script.
Avec ce script je voulais supprimer toutes les scènes au chargement de la scène Manager et demarrer la scene_start.
Là, ça ne supprime rien et si la scene start est déjà active elle est doublée.
J'avais mis ce script dans toute les scènes de façon à ce qu'il démarre la scène Manager à chaque démarrage.
J'ai compris que si au démarrage de Manager j'avais la scene_start déjà activée j'avais une boucle infinie.
Je pensais que le SceneManager.LoadScene éliminait toutes les scènes présentes.
J'ai donc supprimé ce script.
Code : Tout sélectionner
public class StartScene : MonoBehaviour
{
private void Awake()
{
SceneManager.LoadScene("Manager");
}
}
Là, ça ne supprime rien et si la scene start est déjà active elle est doublée.
Code : Tout sélectionner
public string scene_start;
private void Awake()
{
for (int i = 0; i < SceneManager.sceneCount; i++)
{
Scene scene = SceneManager.GetSceneAt(i);
if (scene.name != "Manager")
SceneManager.UnloadSceneAsync(scene);
}
if (!string.IsNullOrEmpty(scene_start))
SceneManager.LoadScene(scene_start, LoadSceneMode.Additive);
}
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.