COME RIDURRE I TEMPI DI CARICAMENTO SU UNITY
Devlog

COME RIDURRE I TEMPI DI CARICAMENTO SU UNITY

1. Utilizzate gli AssetBundle
Gli AssetBundle sono raccolte di risorse di gioco, come texture, modelli
3D, animazioni, effetti sonori o scene, che possono essere caricate e
scaricate dinamicamente durante l'esecuzione del gioco. Il loro utilizzo
permette di gestire in maniera più efficiente le risorse, caricando in
memoria solamente gli elementi effettivamente necessari in un determinato
momento. Attraverso questo sistema è quindi possibile ridurre l'utilizzo della
memoria e lo spazio occupato su disco, caricando esclusivamente le risorse
pertinenti alla scena o al livello corrente e scaricando quelle che non
sono più necessarie. Per utilizzare gli AssetBundle è necessario crearli attraverso il motore di
gioco, assegnare le risorse ai rispettivi bundle e implementare un sistema
che ne gestisca il caricamento e lo scaricamento nel momento opportuno. Ma quali sono i reali vantaggi dell'utilizzo degli AssetBundle?
Approfondendo la documentazione ufficiale di Unity, emergono diversi
benefici particolarmente importanti per lo sviluppo e la distribuzione di
un videogioco. - Distribuzione dinamica dei contenuti: gli AssetBundle permettono di
caricare le risorse solamente quando sono necessarie. Questa caratteristica
è particolarmente utile nei giochi che prevedono contenuti scaricabili,
aggiornamenti frequenti o contenuti aggiuntivi. Inoltre, permette di
ottimizzare l'utilizzo della memoria, mantenendo caricati solamente gli
asset realmente necessari. - Riduzione delle dimensioni della build iniziale: spostando determinate
risorse all'interno degli AssetBundle è possibile ridurre le dimensioni
della compilazione iniziale dell'applicazione. Questo aspetto può risultare
particolarmente importante sui dispositivi mobili, dove lo spazio di
archiviazione e la quantità di memoria disponibile possono essere più
limitati. - Compatibilità con diverse piattaforme: Unity permette di creare
AssetBundle specifici per differenti piattaforme. In questo modo è
possibile gestire le risorse in maniera più appropriata in base al
dispositivo sul quale il gioco verrà eseguito. In definitiva, gli AssetBundle rappresentano uno strumento particolarmente
utile per ottimizzare la gestione delle risorse, ridurre le dimensioni
della build iniziale e migliorare la distribuzione dei contenuti,
soprattutto nei progetti caratterizzati da un'elevata quantità di asset
o da aggiornamenti frequenti. 2. Utilizzo della CPU in background Per iniziare, è importante capire cosa si intende per utilizzo della CPU
in background. Si tratta della quantità di potenza di calcolo del processore
utilizzata da programmi, processi o servizi che continuano a lavorare anche
quando non sono direttamente utilizzati dall'utente o non sono visibili in
primo piano sullo schermo. Nel caso dei videogiochi, questo aspetto assume particolare importanza
quando più giochi o applicazioni vengono eseguiti contemporaneamente. Un
gioco che non è attualmente in primo piano può infatti continuare a
utilizzare risorse della CPU, sottraendo capacità di calcolo al gioco
attivo e agli altri processi del sistema. Questo può portare a un utilizzo
non necessario del processore e, nei casi più rilevanti, a una riduzione
delle prestazioni. Per evitare questo problema, Unity mette a disposizione l'impostazione
“Run In Background”, che può essere impostata su false dalle impostazioni
del progetto. In questo modo, quando il gioco perde il focus e passa in
background, Unity può interrompere l'esecuzione del normale game loop,
evitando di continuare a elaborare aggiornamenti che non sono necessari
mentre il gioco non è attivamente utilizzato. È importante, tuttavia, considerare un limite di questa impostazione:
Run In Background non interrompe automaticamente i thread personalizzati
creati tramite script. Eventuali thread avviati dal gioco possono quindi
continuare la propria esecuzione anche quando il game loop di Unity viene
messo in pausa. Per questo motivo, se il progetto utilizza thread personalizzati, è
necessario prevedere una gestione specifica che ne sospenda o riduca
l'attività quando il gioco non è in primo piano. Una delle possibilità è
utilizzare il metodo Thread.Sleep() di C#, che permette di sospendere
temporaneamente l'esecuzione di un thread, riducendo il lavoro effettuato
dalla CPU. In questo modo è possibile evitare che un gioco non attivamente utilizzato
continui a consumare risorse di sistema, lasciando una maggiore quantità di
potenza di calcolo disponibile per il gioco in primo piano. 3. Aggiungete schermate di caricamento L'aggiunta di schermate di caricamento è fondamentale per gestire i tempi
necessari al sistema per preparare le risorse di un programma o di un
videogioco. Durante questa fase, il computer, la console o il dispositivo
mobile deve trasferire e preparare i dati dalla memoria di archiviazione,
come SSD o HDD, alla memoria utilizzata più rapidamente dal sistema, come
la RAM e, in determinati casi, la memoria della scheda video. All'interno di un videogioco, durante il caricamento possono essere
elaborate e trasferite numerose tipologie di risorse. Tra queste troviamo
le texture, ovvero le immagini utilizzate per rivestire e definire la
superficie dei modelli 3D; i modelli, che rappresentano le geometrie
tridimensionali di personaggi, armi, ambienti, strutture e oggetti; e le
risorse audio, come dialoghi, musiche ed effetti sonori. Un'altra componente importante è rappresentata dagli shader, programmi
utilizzati dalla GPU per determinare il modo in cui gli oggetti vengono
visualizzati a schermo, contribuendo, ad esempio, al calcolo di
illuminazione, ombre, riflessi e materiali. I tempi di caricamento non possono sempre essere eliminati completamente.
Per questo motivo, una buona schermata di caricamento non deve
necessariamente ridurre il tempo reale necessario al sistema per completare
le operazioni, ma può contribuire a ridurre la percezione dell'attesa da
parte del giocatore. Una schermata completamente statica, infatti, può far percepire il
caricamento come un'interruzione del gioco. Al contrario, fornire al
giocatore informazioni e contenuti durante questa fase permette di mantenere
la sua attenzione e rendere l'attesa meno frustrante. Sono numerosi i videogiochi che utilizzano le schermate di caricamento
per mostrare consigli, suggerimenti, informazioni sul gameplay o elementi
della storia. È inoltre possibile utilizzare indicatori visivi, come barre
di caricamento, percentuali di completamento o brevi messaggi, in modo da
comunicare al giocatore che il gioco sta continuando a elaborare le
risorse e non si è bloccato. Le schermate possono inoltre essere rese dinamiche o interattive,
attraverso animazioni, piccole attività, minigiochi o semplici puzzle.
In questo modo, il giocatore può continuare a interagire con il titolo
anche durante le fasi di attesa. Un'altra possibilità consiste nell'utilizzare questo spazio per mostrare
concept art, illustrazioni, modelli, curiosità sullo sviluppo o una
selezione di contenuti realizzati dal team. In particolare, per i
videogiochi indipendenti, questa soluzione può rappresentare un'interessante
opportunità per raccontare il processo creativo e permettere al giocatore
di conoscere meglio il lavoro svolto durante lo sviluppo. Una schermata di caricamento ben progettata diventa quindi qualcosa di più
di una semplice attesa: può trasformare un momento inevitabile dal punto
di vista tecnico in un'ulteriore occasione per comunicare, intrattenere e
mantenere coinvolto il giocatore. FONTI: https://unity.com/blog/optimize-game-menu-for-faster-loading https://www.linkedin.com/advice/0/what-best-strategies-reducing-
video-game-load-tfesc https://docs.unity3d.com/6000.2/Documentation/Manual/AssetBundlesIntro.html