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();
}