Page 1 sur 1

Système de Pooling

Publié : 08 Mars 2021 18:58
par Janpole
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)

Re: Mon jeu re-lag (mobile)

Publié : 08 Mars 2021 20:35
par Janpole
en fait cela vient de l'instanciate mais comment je pourrais faire pour faire un pooling qui génère des tiles aléatoirement ??

Re: Mon jeu re-lag (mobile)

Publié : 09 Mars 2021 09:17
par boubouk50
Quel Instantiate ()???

Soit tu continues sur le même sujet, si c'est pertinent, soit tu repostes les informations nécessaires à t'aider.
Merci.

Re: Mon jeu re-lag (mobile)

Publié : 09 Mars 2021 21:34
par Janpole
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 ?

Re: Système de Pooling

Publié : 09 Mars 2021 21:51
par boubouk50
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.