Système de Pooling

Toutes les questions sur le développement Mobile, y compris la partie script.
Janpole
Messages : 28
Inscription : 12 Fév 2021 18:51
Localisation : Planète terre

Système de Pooling

Message par Janpole » 08 Mars 2021 18:58

bonjour je reviens après avoir résolu mon problème . mais mon jeu se remet malheureusement a lagguer .
je pense peut être que cela est dû au script du déplacement :

Code : Tout sélectionner

using System.Collections;
using UnityEngine;
using UnityEngine.UI;


public class PalyerController : MonoBehaviour
{
    private CharacterController controller;
    private Vector3 direction;
    public float forwardSpeed;
    public float maxspeed;
    public Text coinnnn;
    
  

    private int desiredLane = 1;//0 :left 1:middle 2:right 
    public float laneDistance = 4; //la distance
    public static bool gameStarted = true;
   
    void Start()
    {
        gameStarted = true;
        controller = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {

        if (gameStarted == true)
        {
            controller.Move(direction * Time.deltaTime);
        }

        if (gameStarted == true)
        {
            if (forwardSpeed < maxspeed)
                forwardSpeed += 0.1f * Time.deltaTime;
            direction.z = forwardSpeed;
            if (SwipeManager.swipeRight)
            {
                

                desiredLane++;
                if (desiredLane == 3)
                    desiredLane = 2;
            }

            if (SwipeManager.swipeLeft)
            {
                
                desiredLane--;
                
                if (desiredLane == -1)
                    desiredLane = 0;
                

            }

            Vector3 targetPosition = transform.position.z * transform.forward + transform.position.y * transform.up;

            if (desiredLane == 0)
            {
                targetPosition += Vector3.left * laneDistance;
            }
            else if (desiredLane == 2)
            {
                targetPosition += Vector3.right * laneDistance;
            }


            if (transform.position != targetPosition)
            {
                Vector3 diff = targetPosition - transform.position;
                Vector3 moveDir = diff.normalized * 25 * Time.deltaTime;
                if (moveDir.sqrMagnitude < diff.sqrMagnitude)
                    controller.Move(moveDir);
                else
                    controller.Move(diff);
            }
                
           
        }
        coinnnn.text = "coin : " + PlayerManager.numberofcoin;
    }
        

    private void FixedUpdate()
    {
       

    }

    private void OnControllerColliderHit(ControllerColliderHit hit)
    {
        if (hit.transform.tag == "obstacle")
        {
            FindObjectOfType<audiomanager>().Playsound("crash");
            if (score.Score > score.bestscore)
            {
                score.bestscore = score.Score;
            }
            gameStarted = false;
            PlayerManager.gameOver = true;
            Events.stop = true;


        }
    }
}
j' ai enquêté de mon côté et j'ai remarqué que cela ne venais pas de :
-de l'instantiate ,
-de la camera,
-du gui
et tout les autres trucs je ne sais pas
merci de votre aide en avance .
n'hésitez pas a me demander si besoin des scripts ou autres truc du genre
(Ps: je suis débutant)

Janpole
Messages : 28
Inscription : 12 Fév 2021 18:51
Localisation : Planète terre

Re: Mon jeu re-lag (mobile)

Message par Janpole » 08 Mars 2021 20:35

en fait cela vient de l'instanciate mais comment je pourrais faire pour faire un pooling qui génère des tiles aléatoirement ??

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5573
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Mon jeu re-lag (mobile)

Message par boubouk50 » 09 Mars 2021 09:17

Quel Instantiate ()???

Soit tu continues sur le même sujet, si c'est pertinent, soit tu repostes les informations nécessaires à t'aider.
Merci.
"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

Janpole
Messages : 28
Inscription : 12 Fév 2021 18:51
Localisation : Planète terre

Re: Mon jeu re-lag (mobile)

Message par Janpole » 09 Mars 2021 21:34

bonsoir le problème ce que mon autre sujet est verrouillé , don je ne peut pas l'éditer.
en fait j'utilise la fonction instantiate pour faire spawner des tiles dans mon endless runner. le problème ?
cela créé du lag a cause de cette fonction
donc comment je pourrais faire pour remplacer un instantiate qui fait spawner aléatoirement par un pool, mais qui est aléatoire ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5573
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Système de Pooling

Message par boubouk50 » 09 Mars 2021 21:51

Le pooling, ce n'est pas très compliqué à mettre en place.
Il faut mettre de côté les ressources utilisées, déjà instanciées, et les réutiliser.
Au lieu de faire une instanciation puis une destruction, tu pioches dans tes ressources puis tu les relâches. Cela économise le chargement des données puisqu'elles sont déjà présentes en jeu.

Ici, dans ta scène, tu vas créer une liste d'objets spécifiques (ceux qui tu instancies à l'heure actuelle) en plusieurs exemplaires en fonction des besoins -> Si tu as 5 blocs de terrains différents et que seuls 3 sont visibles en même temps, alors tu peux soit avoir 3 instances de chaque bloc et piocher aléatoirement dans la liste pour ne jamais manquer, soit n'en avoir qu'un (ou deux) de chaque et avoir un aléatoire plus déterministe pour ne jamais avoir 2 fois le même terrain qui suit.
Idem pour les voitures, les obstacles, les pièces, etc.
Ces objets sont masqués de base pour ne pas être calculés.
Ainsi, plus aucune instanciation, puisque les objets sont déjà présents, il te faudra juste les afficher et les masquer.
Tips:
- Tu dois faire attention à ne pas piocher un objet déjà utilisé. C'est simple, il suffit de tenir à jour une liste des objets non-utilisés et piocher dedans.
- Si tu n'as plus d'objet en ressources, tu peux en instancier un puis l'ajouter à ta liste de pool. Ainsi, tu ne seras plus en manque pour la suite.
"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 « Développement plateformes mobile Iphone et Android »