giovedì 27 novembre 2014

Come rendere un gioco lento e inefficiente Unity3D

Invece di fare il solito post "come migliorare le prestazioni di un gioco Unity3D" o "come incrementare gli FPS in Unity3D", ho voluto fare l'inverso.
Quali sono i modi migliori per rallentare un gioco, peggiorare le prestazioni, FPS, ecc. Insomma, quali sono gli errori che facciamo comunemente che fanno calare il frame rate?
Scopriamolo!






Inizio io con un elenco ma mi piacerebbe molto avere l'opinione anche da altri sviluppatori.
  • Debug.Log() dappertutto!
  • Compressione? Non so proprio cosa sia.
  • Muovere oggetti statici sempre e comunque.
  • Ma chi se ne frega delle funzioni, mettiamo tutto in Update!
  • Adoro l'OnGUI
  • Materiali...materiali d'ovunque.
  • Io mi prendo un mesh collider! Tu ti prendi un mesh collider! Tutti ottengono un mesh collider!!
  • Pooling?! Ma che, io faccio new e destroy ogni volta che mi pare!
  • Ma quanto sono belle le luci dinamiche!
  • GameObject.Find.FindGameObjectWithTag.FindWithTag.FindObjectsOfType
  • Shaders pesantissimi e tantissimi particles
  • Occlusion culling è il male assoluto, voglio renderizzare sempre tutto!
  • Guardate quanti poligoni ha questo fiore!! 

La parola a voi sviluppatori Unity3D e non! Dateci dentro.
Quali sono i modi per appesantire un gioco?

2 commenti:

  1. Queste problematiche sono all'ordine del giorno quando si vuole sviluppare un progetto che miri soprattutto al mercato mobile dove le risorse sono scarse. Per mia esperienza credo che il miglior modo di far surriscaldare il telefono e avere un consumo eccessivo di risorse sia proprio come hai suggerito tu quello di utilizzare modelli con molti poligoni e molti materiali che si traduce in un carico notevole sulla CPU e sulla GPU con conseguente spreco della batteria.
    Per quanto riguarda ongui posso dire che in realtà non é poi così pesante se usato saggiamente, io l'ho usato per l'ultimo progetto che ho sviluppato e devo dire grazie ad ongui che semplifica la gestione degli input senza costringerti a creare un metodo o una classe apposta mi sono trovato bene.
    Le luci dinamiche sono un altro problema di dispendio di risorse e bisogna mettere in conto chebse si intende utilizzarle il carico sulla gpu aumenta in maniera esponenziale e quindi bisogna limitare la qualità dei modelli o semplicemente emularle con delle texture semitrasparenti alla base dei modelli e usare il lightmap per gli oggetti statici.

    RispondiElimina
    Risposte
    1. Concordo pienamente con quello che dici! Sul fatto dell'OnGUI, io lo userei solo proprio per fare i menù o comunque quelle parti di gioco statiche in cui non c'è effettivamente troppo da renderizzare. Più che altro per ora l'alternativa sono i plugin sviluppati da terzi (vedi NGUI) ma speriamo che Unity 5 risolva.
      Quindi aggiungeresti all'elenco il "non utilizzare lightmapping". Concordo e soprattutto aggiungerei anche il discorso ombre.

      Elimina