Bonjour,
Alors je suis entrain de faire mon premier jeu, donc bon vous le voyez venir j'ai quelques soucie dans la création de mon jeu.
Le principal soucie c'est que mon jeu rame un peu sur mon téléphone, j'ai un Honor 8 donc c'est pas une bête de course mais quand même.
Sur ma tablette qui est une Samsung galaxy tab A 2019 c'est encore pire.
J'ai mis un script qui permet d'afficher le nombre de fps en jeu, sur mon Honor 8 j'ai entre 50 et 60 fps et sur ma tablette j'ai plutôt 30 - 40 fps.
Le problème surtout c'est que le manque de fps fait trombler la camera, j'ai une camera un peu spécial, elle est "fixer" sur un objet en mouvement mais elle regarde un autre objet en mouvement du coup avec le manque de fps il y a un effet bizarre, mon jeu ne contient pas beaucoup d'objets 3D je suis étonnée qu'il rame comme ça.
Est-ce-que vous avez des conseils pour optimiser le jeu sur Android ?
Est-ce-qu'il y a un moyen dans Unity de savoir qu'est ce qui pompe le plus de ressources ?
Merci
Frame rate trop bas sur android
Re: Frame rate trop bas sur android
Salut.
Déjà en premier lieu, sans vouloir dire de bêtises, même avec un framerate trop bas, il ne devrait pas y avoir de raison pour que ta camera tremble, peut importe les conditions que tu lui donne (position, orientation).
quel est le script qui gère ta caméra? utilisation du Time.deltatime?
au pire ton image devrait juste saccader vu le framerate bas, et encore jusque 30fps, c'est a peine visible normalement.
Ensuite comment calcul tu le framerate et comment l'affiche tu? J'ai justement fait hier un script rapide pour me pettre aussi de voir l'impact de modifications sur le framerate dans mon jeu :
pour ce qui est des application mobile, je suis pas bon connaisseur, mais les materials influent pas mal sur les perfs, les light et shadows aussi..
Tu dis ne pas avoir beaucoup d'objets 3d dans ta scène mais ce qui prime c'est le nombre de vertex, combien en ont-il chacun?
Ensuite faudrait voir tes scripts, peut être à optimiser si tu as de lourdes opération en Update ou autre.
pour savoir ce qui bouffe de la ressource, regarde du coté du "profiler",dans unit : windows -> analysis -> profiler.
En gros les solutions peuvent être très variées, donne un peu plus d'info et détails sur ton jeux aidera a cibler le ou les problèmes.
Déjà en premier lieu, sans vouloir dire de bêtises, même avec un framerate trop bas, il ne devrait pas y avoir de raison pour que ta camera tremble, peut importe les conditions que tu lui donne (position, orientation).
quel est le script qui gère ta caméra? utilisation du Time.deltatime?
au pire ton image devrait juste saccader vu le framerate bas, et encore jusque 30fps, c'est a peine visible normalement.
Ensuite comment calcul tu le framerate et comment l'affiche tu? J'ai justement fait hier un script rapide pour me pettre aussi de voir l'impact de modifications sur le framerate dans mon jeu :
Code : Tout sélectionner
using UnityEngine;
public class ShowFPS : MonoBehaviour
{
private float fps = 0;
private float smoothfps = 0;
private float yVelocity = 0.0f;
void OnGUI()
{
fps = 1.0f / Time.smoothDeltaTime;
smoothfps = Mathf.SmoothDamp(smoothfps, fps, ref yVelocity, 0.3f);
GUI.Label(new Rect(10, 10, 200, 200), Mathf.RoundToInt(smoothfps).ToString("D4"));
}
}
Tu dis ne pas avoir beaucoup d'objets 3d dans ta scène mais ce qui prime c'est le nombre de vertex, combien en ont-il chacun?
Ensuite faudrait voir tes scripts, peut être à optimiser si tu as de lourdes opération en Update ou autre.
pour savoir ce qui bouffe de la ressource, regarde du coté du "profiler",dans unit : windows -> analysis -> profiler.
En gros les solutions peuvent être très variées, donne un peu plus d'info et détails sur ton jeux aidera a cibler le ou les problèmes.
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: Frame rate trop bas sur android
J'imagine que tu fais des calcules de positions avec ta camera. Si c'est le cas donnes tu bien à ta camera sa nouvelle position dans la fonction "LateUpdate()"?
Re: Frame rate trop bas sur android
@djulio74
En effet J'ai des tremblements, mais j'ai l'impression que c'est plutôt l'objet sur le quel est "fixer" la camera qui tremble et non pas tout la camera.
Voilà le code de la camera (que j'ai trouvé sur le net et que j'ai un peu modifier pour avoir le résultat que je veux) :
Et oui comme tu peux le voir il y a du "Time.deltatime" mais je dois avouer que je ne comprend pas vraiment quel et son utilité.
Pour le compteur de FPS j'utilise ce code (Que j'ai trouvé sur le net aussi) :
Pour ce qui est des materials j'utilise seulement des materials "Standard" à l'exception d'un objet ou j'utilise "Unlit -> Transparent" pour avoir de la transparence.
Et le nombre de vertex est bas, c'est des objets que j'ai faits moi même, dans unity quand je regarde dans le bouton "Stats" en haut à droite quand on lance le jeu j'ai "Verts : 103.0 k" je suis même pas sûr que ce soit bien le nombre de Vertex ?
Sinon j'ai aussi un terrain sur le quel il y a des arbres mais j'ai mis tous les réglages au minimum dans les options du terrain, d'ailleurs a la base je voulais aussi mettre de l'herbe mais après plusieurs tentatives cela me semble impossible pour un jeu mobile, l'herbe fait ramer le jeu fortement.
Pour "profiler",dans unit : windows -> analysis -> profiler j'avais déjà essayé de regarder dedans mais bizarrement ce qui prend le plus de CPU c'est "Vsync" et "Other", j'ai peut-être pas bien compris comment ça fonctionne mais je vois rien de particulier.
@DevAmat Oui comme tu peux le voir en haut il y a des calculs, j'ai essayé de mettre le scripte entier dans "LateUpdate()" mais c'est pareille, j'ai aussi essayé de mettre seulement le dernier paramètre, donc "transform.LookAt(correct) ;" dans "LateUpdate()" mais pareille sa tremble toujours.
En effet J'ai des tremblements, mais j'ai l'impression que c'est plutôt l'objet sur le quel est "fixer" la camera qui tremble et non pas tout la camera.
Voilà le code de la camera (que j'ai trouvé sur le net et que j'ai un peu modifier pour avoir le résultat que je veux) :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
//put this component on camera
//drag target object (ball) onto the TargetObject public variable
public class CameraScript : MonoBehaviour
{
public Transform player;
public Transform ball;
// The target we are following
// The distance in the x-z plane to the target
public float distance = 10.0f;
// the height we want the camera to be above the target
public float height = 5.0f;
// How much we
public float heightDamping = 2.0f;
public float rotationDamping = 3.0f;
float wantedRotationAngle;
float wantedHeight;
float currentRotationAngle;
float currentHeight;
Quaternion currentRotation;
public float distanceBall = 10.0f;
// the height we want the camera to be above the target
public float heightBall = 5.0f;
// Use this for initialization
Vector3 correct;
void Start()
{
}
void Update()
{
float distance = Vector3.Distance(player.transform.position, ball.transform.position);
float DiffY = player.transform.position.y - ball.transform.position.y;
wantedRotationAngle = player.eulerAngles.y;
wantedHeight = player.position.y * 1.1f + heightBall - ball.position.y / distance * Time.deltaTime;
currentRotationAngle = transform.eulerAngles.y;
currentHeight = transform.position.y;
// Damp the rotation around the y-axis
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, 0 * Time.deltaTime);
// Damp the height
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);
// Convert the angle into a rotation
currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
// Set the position of the camera on the x-z plane to:
// distance meters behind the player
transform.position = player.position;
transform.position -= currentRotation * Vector3.forward * distanceBall;
// Set the height of the camera
transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
correct = new Vector3(ball.position.x, ball.position.y + DiffY / 2, ball.position.z);
transform.LookAt(correct) ;
}
}
Pour le compteur de FPS j'utilise ce code (Que j'ai trouvé sur le net aussi) :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class FPS : MonoBehaviour
{
float deltaTime = 0.0f;
void Update()
{
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 0, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color(0.0f, 0.0f, 0.5f, 1.0f);
float msec = deltaTime * 1000.0f;
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
GUI.Label(rect, text, style);
}
}
Pour ce qui est des materials j'utilise seulement des materials "Standard" à l'exception d'un objet ou j'utilise "Unlit -> Transparent" pour avoir de la transparence.
Et le nombre de vertex est bas, c'est des objets que j'ai faits moi même, dans unity quand je regarde dans le bouton "Stats" en haut à droite quand on lance le jeu j'ai "Verts : 103.0 k" je suis même pas sûr que ce soit bien le nombre de Vertex ?
Sinon j'ai aussi un terrain sur le quel il y a des arbres mais j'ai mis tous les réglages au minimum dans les options du terrain, d'ailleurs a la base je voulais aussi mettre de l'herbe mais après plusieurs tentatives cela me semble impossible pour un jeu mobile, l'herbe fait ramer le jeu fortement.
Pour "profiler",dans unit : windows -> analysis -> profiler j'avais déjà essayé de regarder dedans mais bizarrement ce qui prend le plus de CPU c'est "Vsync" et "Other", j'ai peut-être pas bien compris comment ça fonctionne mais je vois rien de particulier.
@DevAmat Oui comme tu peux le voir en haut il y a des calculs, j'ai essayé de mettre le scripte entier dans "LateUpdate()" mais c'est pareille, j'ai aussi essayé de mettre seulement le dernier paramètre, donc "transform.LookAt(correct) ;" dans "LateUpdate()" mais pareille sa tremble toujours.
- boubouk50
- ModoGenereux
- Messages : 6214
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Frame rate trop bas sur android
C'est un problème récurrent, je le crains. Il provient surtout de l'attachement de la caméra au parent.
Entre l'objet en mouvement (géré avec la physique? -> FixedUpdate ou Update), l'objet regardé (FixedUpdate ou Update) et le rendu caméra (LateUpdate), cela fait beaucoup de timing différents.
Quoiqu'il en soit, travailler avec la caméra se fait dans le LateUpdate ().
https://forum.unity.com/threads/first-p ... nt.533892/
https://forum.unity.com/threads/camera- ... em.115224/
Entre l'objet en mouvement (géré avec la physique? -> FixedUpdate ou Update), l'objet regardé (FixedUpdate ou Update) et le rendu caméra (LateUpdate), cela fait beaucoup de timing différents.
Quoiqu'il en soit, travailler avec la caméra se fait dans le LateUpdate ().
https://forum.unity.com/threads/first-p ... nt.533892/
https://forum.unity.com/threads/camera- ... em.115224/
"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: Frame rate trop bas sur android
Ok, alors pour le moment j'ai fait quelque chose qui "contourne le problème" j'ai simplement bloquer le frame rate à 30 FPS et du coup je peux même ajouter de l'herbe j'ai plus de problèmes, ni de tremblement ni de chute de FPS.