2017-11-05 5 views
0

Ich versuche, ein texture2d zu skalieren (verkleinern), bevor ich es komprimiere und über das Netzwerk sende, aber das resultierende texture2d ist leer (es wird nur als solides Grau geladen). verwende ich tex.Resize(800, 600, TextureFormat.RGB24, true); falsch?Unity Texture2D.Resize() mit leerer Textur

[Client] 
    public void PrepareServerData(Texture2D texToSend, string typeToSend) 
    { 
     StartCoroutine(DoResizeTex(texToSend)); 
     StartCoroutine(DoGetTexToBytes(texToSend)); 

     playerObj.texWidth = texToSend.width; 
     playerObj.texHeight = texToSend.height; 
     playerObj.texFormat = texToSend.format; 
     playerObj.tranX = tran.x; 
     playerObj.tranY = tran.y; 
     playerObj.tranZ = tran.z; 
     playerObj.type = typeToSend; 
     Player_ID id = GetComponent<Player_ID>(); 
     playerObj.id = id.MakeUniqueIdentity(); 
     playerObj.strength = strengthToSend; 
     playerObj.hitpoints = hitPointsToSend; 

     Network_Serializer serialize = GetComponent<Network_Serializer>(); 
     byte[] bytes = serialize.ObjectToByteArray(playerObj); 

     StartCoroutine(Network_Transmitter.instance.DoSendBytes(0, bytes)); 
    } 

    IEnumerator DoGetTexToBytes(Texture2D tex) 
    { 
     byte[] texBytes = tex.GetRawTextureData();      // convert texture to raw bytes 
     byte[] compressedTexBytes = lzip.compressBuffer(texBytes, 9); // compress texture byte array 
     playerObj.texBytes = compressedTexBytes;      // set compressed bytes to player object 

     yield return new WaitForEndOfFrame(); 

     GameObject infoDisplayText = GameObject.Find("InfoDisplay"); 
     infoDisplayText.GetComponent<Text>().text += "Bytes to send : " + playerObj.texBytes.Length + "\n"; 
    } 

    IEnumerator DoResizeTex(Texture2D tex) 
    { 
     tex.Resize(800, 600, TextureFormat.RGB24, true); 
     tex.Apply(); 

     yield return new WaitForEndOfFrame(); 
    } 

Antwort

1

ich derzeit Graben auch durch Textur die Größe in der Einheit und Texture.Resize Ich fand nur den Behälter passt die Größe (die Anordnung von Daten) der Textur, ist es nicht Inhalt nicht verwendet, sondern hat filled-- werden in Meiner Meinung nach schlägt es etwas anderes vor, so wie du es erwartet hast. Die Größenanpassung der Textur ist kein Feature, das in C# in Unity implementiert wurde. Sie muss pro Pixel durchgeführt werden, indem Daten iteriert und verarbeitet werden.

Nicht komfortabel und leider sehr langsam. Es ist ein Asset verfügbar, das die Lücke füllt (Texturanpassungen).