2017-12-20 1 views
0

Ich versuche herauszufinden, wie kann ich Modelle und Texturen auf die effizienteste Weise mit Unity3D zur Laufzeit laden, bisher habe ich über glTF-Formate gelesen, Draco API, und derzeit habe ich ein einfaches Verfahren implementiert, das sehr langsam arbeitet. Ich benutze BestHTTP und für Texturen mache ich das:Importieren von 3D-Objekten und Textur zur Laufzeit durch Server

Und mit ObjImporter für den Import von Objekten.

var gameObject = ObjImporter.Import(objStr, mtlStr, textureHashtable); 

Zur Laufzeit benötigen Modelle mit 3-5 MB bis zu 3-5 Sekunden zum Laden. Das ist sehr langsam und für nichts geeignet. Dies wird lokal eine 200-300mb apk ergeben, wenn ich etwa 100 Modelle habe.

So suche ich derzeit nach einer Möglichkeit, dies effizient zu tun, und würde Ihre Hilfe lieben. Ich denke, es wird am besten sein, die Modelle mit Draco API zu laden. aber ich bin mir nicht sicher, wie man das Plugin erstellt, das mit dieser API kommuniziert.

+0

Haben Sie Asset Bundles in Betracht gezogen? – Hristo

+0

@Hristo Ja. und es ist ein No-Go. Es ist langsam wie das, was ich gerade mache. Hier ist ein Verweis, es zu beweisen: https://answers.unity.com/questions/10868/how-to-build-asset-bundles-at-runtime-from-a-serve.html –

+0

Nun, diese Antworten und die Post sind von 2010. Auch benutze ich derzeit Asset-Bundles und es dauert ~ 5 Sekunden, um ein Asset-Bundle von 2-3 MB in der App herunterladen und laden – Hristo

Antwort

0

1 MB pro Sekunde ist keine schlechte Download-Geschwindigkeit. Wirklich die einzige Option ohne Vorhersage ist es, die Auflösung Ihrer Texturen zu verringern und sie kleiner zu machen, Ihre Texturdateien in "Chunks" zu komprimieren und jeden "Chunk" nach Bedarf herunterzuladen, zu dekomprimieren und auf Modelle anzuwenden, aber das würde wahrscheinlich noch dauern eine gute Zeit.

Ich denke, was Sie wirklich wollen, ist eine Vorhersagelogik, die "Bundles" von Assets lädt, bevor sie tatsächlich benötigt werden, und speichern Sie sie im Speicher für die spätere Verwendung.

Wenn der Player zum Beispiel 200 Meter von einem Haus entfernt ist, das vor dem Ansehen heruntergeladen werden muss, und die Entfernung zwischen den Playern 100 Meter beträgt, beginnen Sie mit dem Herunterladen des Hauses. Wenn sich das Haus in Sichtweite des Spielers befindet, wird es heruntergeladen und kann verwendet werden.

+0

Ich verstehe, was Sie sagen, aber wenn Sie eine Benutzeroberfläche mit 20 Modellen haben darin, und du musst nach links/rechts zwischen ihnen wischen, ich möchte, dass sie sofort instanziieren. –

+0

Ich sehe zwei mögliche Optionen für dieses Szenario ... WENN es genug Zeit gibt, diese 20 Modelle herunterzuladen, bevor der Spieler zu diesem Menü gelangen kann, würde ich beginnen, sie herunterzuladen, sobald Runtime initiiert (Sie könnten sogar die Modelle "streamen") wenn sie herunterladen, aber zumindest die ersten 5 bis 10 können heruntergeladen werden und bereit sein, wenn der Spieler dort ankommt ODER, können Sie die Modelle in das, was sofort benötigt wird (oder 3000 Mal in Ihrem Spiel verwendet) und diese trennen Modelle sollten für schnellere Ladezeiten ausschließlich im Projektordner gespeichert werden, während der Rest auf den Download wartet –

+0

Ich weiß, dass es doof scheint, all Ihre Modelle zwischen lokaler Speicherung und Speicherung auf einem Server zu trennen, aber es ist eigentlich der logische Ansatz wenn du zum Beispiel eine Box hast, die während des ganzen Spiels mehrfach benutzt wird –