2016-09-27 17 views
1

からロードするときに、私は私の風合いを得るためにDownloadHandlerTexture.GetContentを使用していユニティににTexture2Dが読みやすく:は、サーバ

www = UnityWebRequest.GetTexture("http://www.example.com/loadTex/?tag=" + tag); 
www.SetRequestHeader("Accept", "image/*"); 
async = www.Send(); 
while (!async.isDone) 
    yield return null; 

if (www.isError) { 
    Debug.Log(www.error); 
} else { 
    yield return null; 
    tex = DownloadHandlerTexture.GetContent(www); 
} 

ロードした後、私がやるので、私はそれをファイルにキャッシュしたいと思います:

byte[] pic = tex.EncodeToPNG(); 
File.WriteAllBytes(Application.persistentDataPath + "/art/" + tag + ".png", pic); 
この時点で

は、私は例外を取得:

UnityException: Texture '' is not readable, the texture memory can not be accessed from 
scripts. You can make the texture readable in the Texture Import Settings. 

私は何とかそれを読みやすくする必要があると考えています。私はそれを見つけましたが、私が得る唯一の答えは、それをエディタで読みやすくする方法です。

答えて

2

UnityWebRequestのデータを保存することができます。あなたはその目的のために私は少し役に立たない。結果をテクスチャに変換してテクスチャをbyte []に​​戻します。

byte[] bytes = www.uploadHandler.data; 
File.WriteAllBytes(Application.persistentDataPath + "/art" + tag, data); 

私はこれがすべきだと思います。ローのバイト配列を格納するときに拡張子.pngは必要ありません。その後、配列を取得し、そこからテクスチャを作成します:

byte [] bytes = File.ReadAllBytes(Application.persistentDataPath + "/art" + tag); 
Texture2D texture = new Texture2D(4,4,TextureFormat.RGBA32, false); 
texture.LoadImage(bytes); 
+0

私は」私のモデルで使用するテクスチャを読み込みます。しかし、プログラムが終了すると、私はファイルにキャッシュしようとしています。私が 'DownloadHandlerTexture.GetContent'を使用しているのは、メモリ用に最適化されているからです。 – serge

+0

最後にキャッシュする代わりに、キャッシュします。それはまったく同じです。 – Everts

+0

合理的に聞こえる、私が家に帰ってすぐに報告するつもりです。また、DownloadHandlerTexture.GetContentを使用する代わりに、バイトからテクスチャをロードする方が効率が悪い – serge

2

ちょうどUnityWebRequest.GetTexture 2つのパラメータ取ることができることを指摘したかった:URLとテクスチャが読めるかどうかにするブール値を:) https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.GetTexture.html

したがって、DownloadHandlerTexture.GetContentを使用してリクエスト結果のテクスチャを取得する前に、単にUnityWebRequest.GetTexture(url、false)を呼び出します。ダウンロードしたテクスチャは読みやすくなります。

PS:Unity 5.6の前に、boolの非読み込み可能性が反転されていることに注意してください。彼らはそれを5.6から修正する必要があります(リリースノートに従って)。

  • 5.6前:あなたのテクスチャが読みやすくするために

    UnityWebRequest.GetTexture(URL、真)

  • 5.6後: (偽URL、)UnityWebRequest.GetTexture