Créer un fond qui change d’environnements

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
orphen92300
Messages : 2
Inscription : 29 Mars 2018 14:32

Créer un fond qui change d’environnements

Message par orphen92300 » 29 Mars 2018 14:53

Hello a tous,
j'aimerai offrir a mon runner un background qui change au fur et a mesure un peu comme dans Zombi tsunami.

Scénario:
le décors défile en mode parallaxe le decors1 se duplique pour simuler un infinie pendant x secondes, puis un décors de transition arrive pendant x seconde puis un deuxième decors choisi aleatoirement apparait (decors8 par exemple) et ainsi de suite.

Quel est la meilleure méthode a utiliser pour faire ceci svp?
J'ai penser a du poolable object mais je ne suis pas sur de moi surtout sur la manière de l’implémenter pour ce cas précis.

Merci beaucoup ;)

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

Re: Créer un fond qui change d’environnements

Message par boubouk50 » 29 Mars 2018 15:42

Salut,

je partirai sur un changement en cours de sprite à charger.
Imaginons 8 décors, donc 8 dossiers comprenant chacun des éléments de chaque décor.
Le fond est composé de sprites instanciés qui vont piocher leur contenu dans un dossier précis.
Quand tu veux changer de décor, il faut que les sprites instanciés aillent piocher leur contenu dans un nouveau dossier. Ainsi, ceux déjà créés continuent de défiler puis les suivants arrivent à la suite. Pour gérer au mieux la transition tu peux avoir un sprite de début spécial qui jointe avec celui de la chargée précédente 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

orphen92300
Messages : 2
Inscription : 29 Mars 2018 14:32

Re: Créer un fond qui change d’environnements

Message par orphen92300 » 31 Mars 2018 14:53

Merci pour ta réponse je m'en suis inspiré pour faire ceci pour le moment:
- Une surface plane pour chaque éléments de mon parallaxe (5 plane).
- Un material dédié a chaque plane
- des sprite différent suivant les environnements et qui sont dans des sous dossiers du dossier sprite.
- Un script a intégrer sur chaque plane et qui permet de controller la vitesse de défilement de la texture des sprites et qui ajoute un repetteur pour déclencher un futur changement de texture.

Image

Code : Tout sélectionner

    public class ParallaxScript : MonoBehaviour {
        /// the relative speed of the object
        public float Speed = 0;
        public static ParallaxScript CurrentParallaxOffset;

        protected float _position = 0;
        protected float yOffset;

        /// <summary>
        /// On start, we store the current offset
        /// </summary>
        void Start() {
            CurrentParallaxOffset = this;
            yOffset = GetComponent<Renderer>().material.mainTextureOffset.y;

            StartCoroutine("ChangeBackground");
        }

        /// <summary>
        /// On update, we apply the offset to the texture
        /// </summary>
        void Update() {
            // TODO: the new position is determined based on the level's speed and the object's speed
            _position += (Speed / 300) * Time.deltaTime;
            /*if (LevelManager.Instance != null){
                _position += (Speed / 300) * LevelManager.Instance.Speed * Time.deltaTime;
            } else {
                _position += (Speed / 300) * Time.deltaTime;
            }*/

            // Position reset
            if (_position > 1.0f) {
                _position -= 1.0f;
            }

            // we apply the offset to the object's texture
            GetComponent<Renderer>().material.mainTextureOffset = new Vector2(_position, yOffset);
        }

        IEnumerator ChangeBackground()
        {
            for (;;)
            {
                Debug.Log("Change Background");
                yield return new WaitForSeconds(15f);
            }
        }
    }
Actuellement je me retrouve avec un premier plane qui contient son material et sa texture.
Comment puis-je faire pour que le material de mon plane change de texture façon aléatoire par rapport aux dossiers présent dans sprite ?

Ai-je utiliser la meilleure méthode?

Merci encore pour vos idées et conseils

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

Re: Créer un fond qui change d’environnements

Message par boubouk50 » 03 Avr 2018 12:11

Séparons bien les choses:
D'un côté l'instanciation, de l'autre le parallax.
Pour ne pas avoir à tout faire en code, je te propose de créer des prefabs pour chaque type que tu viendras instancier par la suite.
Dans la conception, tu auras un dossier Resources qui contiendra chacun de tes dossiers, qui contiendront chacun les mêmes éléments: Prefabs à instancier dont les textures changeront.
Ainsi, en code, tu pourras récupérer le bon dossier, donc les bons prefabs à instancier déjà configurés.

EDIT
Un Loader: il ira chercher les bons assets à charger dans le dossier voulu
Un instancieur: il instanciera les prefabs chargés.
Un controlleur: il sera appliqué à chaque prefabs pour gérer les transformations des éléments (déplacement + vitesse)
Un switcher: il décidera quand changer d'assets, donc de dossier à charger
"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

Répondre

Revenir vers « Unity le logiciel »