2013-07-02 10 views
6

Quindi, ho fatto un po 'di lettura attorno ai forum su AssetBundles e la cartella Risorse in Unity 3D, e non riesco a capire la soluzione ottimale per il problema che sto affrontando. Ecco il problema:Unity 3D: cartella Asset Bundles vs. Risorse vs www.Texture

Ho un programma progettato per standalone, che carica "libri" pieni di immagini .png e .jpg. Le pagine sono, al momento, la stessa ogni volta che si avvia il programma. All'inizio della scena per qualsiasi "libro", carica tutte quelle immagini contemporaneamente usando www.texture e un percorso. Sto realizzando ora, tuttavia, che questo è probabilmente un metodo non performante per accedere a cose in fase di esecuzione - è lento! Il che significa che l'utente non può fare nulla per 5-20 secondi mentre la scena inizia e le immagini della pagina del libro si caricano (su computer non leggendari). Quindi, non riesco a capire quale delle tre cose sarebbe la più veloce:

1) Caricamento di un pacchetto di risorse per libro (diciamo 20 trame @ 1 MB ciascuna).

2) Caricamento di un pacchetto di asset per pagina (1 MB ciascuno).

3) Una delle due prime opzioni, ma caricata dalla cartella delle risorse.

Quale sarebbe più veloce e perché? Capisco che i pacchetti di risorse sono confezionati in base all'unità, ma ciò significa che le trame all'interno saranno precompresse e più facili in memoria al momento del caricamento? La cartella delle risorse causa meno tempo di caricamento? Cosa dà? A quanto ho capito, la cartella delle risorse viene caricata in una cache, ma è la stessa cache utilizzata normalmente dal player standalone? O è questo spazio extra inutilizzato? Immagino che un altro problema sia che non sono sicuro di quale sia la differenza tra il caricamento di cose dalla memoria e l'archiviazione nella cache.

Acclamazioni, gente ...

risposta

8

Le cartelle risorse sono in bundle risparmio gestito. Ciò significa che saranno compressi da Unity, seguendo le impostazioni applicate nell'IDE. Sono quindi efficienti da caricare in fase di runtime. È possibile personalizzare la compressione per ogni piattaforma, che dovrebbe ottimizzare ulteriormente le prestazioni.

Facciamo un uso costoso di Resources.Load() per estrarre risorse e funziona bene su desktop e dispositivi mobili.

Esiste anche una cartella speciale, denominata StreamingAssets, che è possibile utilizzare per inserire risorse non gestite in bundle. È qui che inseriamo i video che vogliamo riprodurre in fase di esecuzione, ma non vogliamo che Unity li converta nel codec ogg predefinito. Sul cellulare questi riproducono nel lettore video nativo. Puoi anche inserire immagini e caricarle è come usare la classe WWW. Lento, perché Unity ha bisogno di disinfettare e comprimere le immagini al momento del caricamento.

Il caricamento del WWW è più lento a causa del sovraccarico delle risorse di elaborazione, come menzionato sopra. Ma puoi estrarre dati da un server o dall'esterno dell'applicazione "sandbox".

  • Caricare solo ciò che è necessario per visualizzare e implementare un processo in background per recuperare contenuto aggiuntivo quando l'utente è occupato a passare le prime pagine di ogni libro. Ciò eviterebbe di bloccare l'interfaccia utente troppo a lungo.
  • Ottimizza le immagini per ridurre le dimensioni del file. Usa tinypng, se hai bisogno di immagini trasparenti, o ti limiti a JPG compressi
  • Prova a utilizzare la potenza di 2 immagini, ove possibile. Ciò dovrebbe accelerare un po 'l'elaborazione runtime.

ath.

+0

Questa è un'ottima risposta alla cartella delle risorse, anche se sono ancora un po 'confuso su come utilizzare AssetBundles. Cercherò di caricare le cose dalla cartella delle risorse e vedere come funziona. – Catlard

+2

AssetBundles sono come una cartella Risorse caricata in fase di esecuzione dall'esterno. È possibile caricare un pacchetto da un'origine locale o un server. Una volta caricato, puoi accedere alle sue risorse in modo molto simile a quelle raggruppate in fase di compilazione all'interno delle cartelle Risorse. AssetsBundles sono grandiosi per ridurre le dimensioni delle applicazioni compilate e caricare il contenuto dinamico (molto probabilmente da un server) in fase di runtime per assicurarsi che l'utente abbia le risorse più recenti. –

4

Grande risposta da parte di Girolamo sulle risorse. Per aggiungere un po 'di informazioni aggiuntive per le future ricerche in materia di AssetBundles, qui ci sono due scenari:

il gioco è troppo grande

Hai un sacco di texture, per esempio, e il vostro gioco iOS è superiore a 100 mb - il che significa che Apple mostrerà un avvertimento agli utenti e impedirà loro di scaricare su cellulare. Le risorse non saranno d'aiuto perché tutto in quella cartella è in bundle con l'app.

Soluzione: sposta l'artwork che non è assolutamente necessario per la prima volta in asset bundle. Costruisci i bundle, caricali su un server da qualche parte, quindi scaricali in fase di runtime, se necessario. Ora il tuo gioco è molto più piccolo e non avrà alcun avvertimento spaventoso.

È necessario diverse versioni di opere d'arte per diverse piattaforme

Scenario alternativo: si sta sviluppando per iPhone e iPad. Per gli stessi motivi di cui sopra, rimpicciolisci il tuo materiale grafico il più possibile per raggiungere il limite di 100 mb per iPhone. Ma ora il gioco sembra terribile su iPad. Cosa fare?

Soluzione: si crea un pacchetto di risorse con due varianti. Uno per telefoni con grafica a bassa risoluzione e uno per tablet con grafica ad alta risoluzione. In questo caso i pacchetti di beni possono essere spediti con il gioco o inviati a un server. In fase di esecuzione, scegli la variante e il carico corretti dal pacchetto di risorse, ottenendo la grafica appropriata senza dover se/else ovunque.

Con tutto ciò, i bundle di asset sono più complicati da usare, scarsamente documentati e le demo di Unity non funzionano correttamente a volte. Valutare seriamente se ne hai bisogno.