Mon jeu lag (mobile)

Toutes les questions sur le développement Mobile, y compris la partie script.
Janpole
Messages : 21
Inscription : 12 Fév 2021 18:51

Mon jeu lag (mobile)

Message par Janpole » 13 Fév 2021 12:30

Ps: je suis débutant

bonjour a tous j'ai remarqué que mon jeu était fluide mais le problème c'est que de temps en temps le jeu fait des espèces de "tac, tac" des petites saccades .
voici mon profiler :
https://youtu.be/T3NFd13wVo4
j'ai déjà peut être une piste :
je génères des tiles car mon jeu est un endless runner. j'ai l'impression qu'a chaque tile généré le jeu saccade( je me demande si ça viens de là)
merci a tous pour vos réponses.

Avatar de l’utilisateur
Max
Messages : 8179
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mon jeu lag (mobile)

Message par Max » 13 Fév 2021 13:11

Bonjour,
Janpole a écrit :
13 Fév 2021 12:30
je génères des tiles car mon jeu est un endless runner. j'ai l'impression qu'a chaque tile généré le jeu saccade( je me demande si ça viens de là)
on peut penser que cela vient d'une partie de ton/tes scripts, ce que le profiler (de ce que je peux en voir) semble confirmer.

n'hésite pas à le poster, cela aiderais je pense à mieux cerner le soucis.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
jmhoubre
Messages : 365
Inscription : 05 Oct 2019 22:05

Re: Mon jeu lag (mobile)

Message par jmhoubre » 13 Fév 2021 14:18

Si tu génères de nombreux tiles à la seconde (cela dépend de la vitesse de ton joueur et de la taille des tiles), une solution efficace est de créer un pool de tiles.

En gros, le jeu génère N tiles au démarrage, chaque appel à Instantiate est remplacé par un appel au pool, chaque destroy est remplacé par le remise en pool. Si le pool est vide, un instantiate crée un nouvel objet pour le pool. Il y a de nombreux tuto sur le net (Brackeys en US et plus vieux, celui de Sebastian League), et un article dans la doc d'unity. Il existe également de nombreux assets gratuits, comme celui-ci.

Janpole
Messages : 21
Inscription : 12 Fév 2021 18:51

Re: Mon jeu lag (mobile)

Message par Janpole » 13 Fév 2021 15:26

bonjour je vais essayer ça.
voici quand même mon sript de génération :

Code : Tout sélectionner

using System.Collections.Generic;
using UnityEngine;

public class TilesManager : MonoBehaviour
{
    public GameObject[] tilePrefabs;
    public float zSpawn = 0;
    public float tileLength = 30;
    public int numberOfTiles = 3;
    private List<GameObject> activeTiles = new List<GameObject>();

    public Transform playerTransform;
    void Start()
    {
        for (int i = 0; i < numberOfTiles; i++)
        {
            if (i == 0)
                SpawnTile(0);
            else
                SpawnTile(Random.Range(0, tilePrefabs.Length));
        }

    }
    void Update()
    {
        if (playerTransform.position.z - 30 > zSpawn - (numberOfTiles * tileLength))
        {
            SpawnTile(Random.Range(0, tilePrefabs.Length));
            DeleteTile();
        }

    }
    public void SpawnTile(int tileIndex)
    {

        GameObject go = Instantiate(tilePrefabs[tileIndex], transform.forward * zSpawn, transform.rotation);
        activeTiles.Add(go);
        zSpawn += tileLength;
    }

    private void DeleteTile()
    {
        Destroy(activeTiles[0]);
        activeTiles.RemoveAt(0);
    }
}

Janpole
Messages : 21
Inscription : 12 Fév 2021 18:51

Re: Mon jeu lag (mobile)

Message par Janpole » 13 Fév 2021 15:55

pour le pool , je génère en fait des tiles aléatoires , du coup je pense que cette technique ne peut pas fonctionner.

Avatar de l’utilisateur
Max
Messages : 8179
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mon jeu lag (mobile)

Message par Max » 13 Fév 2021 16:18

créations de destructions de manière prononcé de GO comme cela me fait de suite penser à un soucis de garbage collector. D’où ce sentiments d'apparition par cycle.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Janpole
Messages : 21
Inscription : 12 Fév 2021 18:51

Re: Mon jeu lag (mobile)

Message par Janpole » 13 Fév 2021 16:50

je précise que mon jeu est en 3d (déso j'avais oublié )
je ne sais pas si les garbages content pour la 3d.

Avatar de l’utilisateur
Max
Messages : 8179
Inscription : 30 Juil 2011 13:57
Contact :

Re: Mon jeu lag (mobile)

Message par Max » 13 Fév 2021 16:54

C'est lié à la gestion de la mémoire. C'est donc purement lié au code.
Un petit peu de lecture: https://docs.unity3d.com/Manual/Underst ... ement.html
;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
jmhoubre
Messages : 365
Inscription : 05 Oct 2019 22:05

Re: Mon jeu lag (mobile)

Message par jmhoubre » 13 Fév 2021 17:22

Janpole a écrit :
13 Fév 2021 15:55
pour le pool , je génère en fait des tiles aléatoires , du coup je pense que cette technique ne peut pas fonctionner.
Je ne crois pas. Il faut adapter la technique générale. Si j'ai compris ton script, tu génères un tableau de prefabs que tu renseignes dans l'inspecteur. Cela revient à un pool d'objets multiples. Le choix du prefab est remplacé par le choix du bon objet dans le pool. Un peu plus compliqué, mais guère plus. Les objets en pool doivent avoir une étiquette (par exemple un tag), la seule difficulté est de bien identifier la taille du pool par type d'objets. Comme tu utilises un pur hasard, tu as le même nombre de tiles par type de tile. Il faut tester (cela dépend entre autres de la vitesse de déplacement). Je pense que comme valeur de départ tu peux mettre 10. Si tu as 30 tiles différents, cela fait donc une taille de pool de 300.
Dans l'Awake ou le start : générer le pool.

Code : Tout sélectionner

pour i de 0 à tilePrefabs.length
	generer 10 tiles avec le tag i et les désactiver
	// dans une liste ou un tableau, le tableau est plus rapide mais pour 300 tiles c'est pareil
générer un tile :

Code : Tout sélectionner

	SpawnTile(Random.Range(0, tilePrefabs.Length))
	
	public GameObject SpawnTile(int tileIndex)
	{
        	// cherche un tile disponible de la bonne catégorie
        	  pour i de 0 à pool.length
        	  {
        	  	si pool[i] est actif 
        	  		continue
        	  	sinon
        	  	{
        	  		SI son tag vaut tileIndex
        	  		{
	        	  		positionner pool[i]
        		  		activer pool[i]
        		  		return pool[i]
        		  	}
        	  	}
        	  }        	  
	}
pour détruire un tile, ajouter un script au tile :

Code : Tout sélectionner

	public void DestroyTile()
	{
		désactiver this
	}
Dans ton code tu appelleras DestroyTile sur le tile à détruire (en fait cacher). A mon sens tu devrais mettre un timer dans le script du tile pour qu’il se cache au bout d'un temps paramétrable.

Janpole
Messages : 21
Inscription : 12 Fév 2021 18:51

Re: Mon jeu lag (mobile)

Message par Janpole » 13 Fév 2021 19:26

j'ai oublié de vous montrez a quoi ressemblait la génération
la voila
https://youtu.be/GsXTD4qGU1U
les tiles disparaissent quasiment après le passage. j'ai aussi 2 script tiles managers , un pour la route , un pour le décor cela peut il créer ce lag ??

Verrouillé

Revenir vers « Développement plateformes mobile Iphone et Android »