Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Destruir Texture2D

Iniciado por alonso240, Noviembre 21, 2015, 03:00:46 PM

Tema anterior - Siguiente tema
Buenas.Tengo un problema con las Textures2D y es que se me acumulan en memoria haciendo el juego cada vez más pesado.La solución que veo es:
Destroy(textura2d,1);
Pero al destruirla me desaparece del modelo.Os pongo el código:
private void CargarTextura(string ruta){

        Texture2D sprite = new Texture2D(0,0);
       
   byte[] fileData;
   
   if (File.Exists(ruta))     {
      fileData = File.ReadAllBytes(ruta);
      sprite.LoadImage(fileData);
      gameObject.GetComponent<Renderer> ().materials
  • .SetTexture("_MainTex",sprite);
   }
   
   Destroy(sprite,1);
}
Si no pongo el "Destroy" funciona correctamente, pero tengo el problema del aumento de memoria y si lo pongo pierdo la textura del modelo.A ver si alguien me puede decir la mejor manera de hacer esto.Muchas gracias.Saludos.

Destroy no se utiliza para ello, puedes usar Array.Clear()
Array.Clear(fileData , 0, fileData.Length);
Ese codigo no es tuyo verdad? ;)

[quote author=GSG3D date=1448118129" data-ipsquote="" data-cite="GSG3D" class="ipsQuote">Destroy no se utiliza para ello, puedes usar Array.Clear() Array.Clear(fileData , 0, fileData.Length); Ese codigo no es tuyo verdad? ;)


La Función CargaTextura, deberias llamarla 1 vez, el consumo, quizas se deba a que la estas utilizando en una función Update, y estas cargando muchos datos sin liberar.

La función la ejecuto una vez en Start, el problema es que cuando destruyo el objeto que contiene el script no se destruye las texturas guardadas en memoria que ha creado dicho objeto.


Ya he probado con GC pero nada.La unica solución que he encontrado es con:
Destroy(textura);
El problema es que tengo que esperar toda la aplicación para destruir el objeto (y sus texturas) antes de crear otro objeto para no tener problemas.

Etiquetas: