2017-12-20 8 views
0

実行時にUnity3Dを使って最も効率的な方法でモデルとテクスチャを読み込む方法を理解しようとしていますが、これまではglTF形式のDraco APIを使用し、現在私は本当に遅く動作する簡単な手順を実装しました。私はBestHTTPを使用していますし、質感のために私はこれをやっている:実行時にサーバーを介して3Dオブジェクトとテクスチャをインポートする

var texFoundPath = Directory.GetFiles(outFolder, texFileName, SearchOption.AllDirectories).Single(); 
          Debug.Log("Loading texture from " + texFoundPath); 

          var texBytes = File.ReadAllBytes(texFoundPath); 

          Texture2D tex = new Texture2D(2,2); 
          tex.LoadImage(texBytes); 

をし、オブジェクトをインポートするためのObjImporterを使用します。

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

実行時には、3-5MBのモデルは読み込むのに3-5秒かかっています。これは非常に遅く、何にも適していません。これをローカルに行うと、約100個のモデルがある場合、200〜300MBのAPKが発生します。

現在、私はこれを効率的に行う方法を探しており、あなたの助けが大好きです。私はDraco APIを使ってモデルをロードするのが最良だと思います。私はそのAPIと通信するプラグインの作成方法がわかりません。

+0

アセットバンドルについて考えましたか? – Hristo

+0

@Hristoはい。それは無駄だ。私が今やっていることのように遅いです。それを証明するための参照があります:https://answers.unity.com/questions/10868/how-to-build-asset-bundles-at-runtime-from-a-serve.html –

+0

これらの回答と投稿はまた、私は現在アセットバンドルを使用しています。アプリケーションに2-3 MBのアセットバンドルをダウンロードしてロードするのに約5秒かかります – Hristo

答えて

0

1 MB /秒は悪いダウンロード速度ではありません。実際に予測を使用しない唯一の選択肢は、テクスチャの解像度を下げて小さくすること、テクスチャファイルを「チャンク」に圧縮し、必要に応じて各「チャンク」をダウンロードし、解凍してモデルに適用することです。良い時間です。

実際に必要とされる前に資産の「バンドル」をロードし、後で使用するためにそれらをメモリに格納する予測ロジックを使用することをお勧めします。

例えば、プレーヤーが表示する前にダウンロードする必要がある家から200メートル離れており、プレイヤーが距離を表示している場合、その家をダウンロードし始めます。家が観覧客の距離以内に来るまでに、それはダウンロードされ、使用の準備ができます。

+0

あなたが言っていることを理解していますが、20モデルその中に左右にスワイプする必要があるので、それらを即座にインスタンス化することができます。 –

+0

私はそのシナリオの2つの可能なオプションを見ています...プレーヤーがそのメニューに入る前にそれらの20のモデルをダウンロードするのに十分な時間があれば、ランタイムが始まるとすぐにダウンロードを開始します(モデルを "ストリーム"彼らがダウンロードしたときには、少なくとも最初の5-10がダウンロードされ、プレーヤーがそこに着くまでに準備ができているか、または必要なものにモデルを分けることができます(またはゲームで3000回以上使用します)モデルをプロジェクトフォルダに保存して、ロード時間を短縮し、残りの部分をダウンロードするのを待つことができます。 –

+0

ローカルに保存され、サーバーに保存される間に、モデルのすべてが分離されているようですが、 –

関連する問題