Jorge Vallejo Blog

Blog del creativo, ilustrador y profesor de videojuegos Jorge Vallejo

Unity: Crear Atlas

Desde la versión Unity 2017, el sistema de empaquetado de Sprites (Sprite Packer) se sustituye por Atlas (Sprite Atlas), la filosofía sigue siendo la misma crear una única textura con los componentes que necesitemosAtlas_preview , es decir un Sprite de Sprites, para mejorar la optimización y el número de Batches o llamadas de dibujo (call draws) que consumen rendimiento, la idea es que los elementos que vienen de un mismo Atlas sólo necesitan un batch para ser representados, si tenemos 20 elementos metidos en Atlas en vez de 20 batch tenemos sólo uno.

Sin embargo el Atlas, va más allá de crear una textura con los elementos, ya que creará internamente un Array con los sprites insertados, por lo cual hará falta código y ejecutar el sistema en tiempo de juego para poder visualizarlos.

Para crear un Sprite Atlas

  1. En el proyecto , botón derecho Create -> Sprite Atlas
  2. Podemos crear un Atlas desde, Una carpeta, un Sprite Sheet o desde un Sprite o grupo de sprites
  3. Es útil reunir todos los sprites de una carpeta y crear el atlas utilizando esa carpta
  4. Con el Atlas seleccionado arrastramos la carpeta a Objects for Packing
  5. La cantidad de elementos que puede almacenar el Atlas depende de su tamaño,si cambiamos Max Texture Size podremos tener Atlas más grandes.
  6. Pulsamos en Pack Preview y Unity generara el Atlas, reducirá al máximo los espacios vacíos.

Para usar un Sprite Atlas

  1. Debemos tener un Sprite Atlas creado
  2. Crearemos un script llamado Gestiona_Atlas
  3. Creamos un Objeto vacío llamado GestionAtlas y le añadiomos el script
  4. Como hijo del elemento metemos un Sprite , Boton derecho 2D -> Sprite
  5. A GestionAtlas le añadimos el siguiente script, debemos tener presente que para usar el Atlas necesitamos importar  UnityEngine.U2D y si queremos utilizar las funciones del List necesitamos  System.Linq;

public class Gestiona_Atlas : MonoBehaviour {
//Necesita la libreria using UnityEngine.U2D;
public SpriteAtlas m_atlas;

public SpriteRenderer m_redener;
public int id_sprite;
List<Sprite> sprite_list;
// Use this for initialization
void Start () {
//Vuelca los sprites del atlas a un list de sprites
Sprite[] sprite_array=new Sprite[m_atlas.spriteCount];
m_atlas.GetSprites (sprite_array);
//Vuelca un array en un List necesita la libreria using System.Linq;
sprite_list = sprite_array.ToList();
//Para usar el Atlas puedo utilizar el array volcado
m_redener.sprite = sprite_array [id_sprite];
//GetSprite devuelve el Sprite con ese nombre
m_redener.sprite = m_atlas.GetSprite(“Tumnas_10″);

}

// Update is called once per frame
void Update () {
//Podemos utilizar la lista para seleccionar un elemento
//m_redener.sprite = sprite_list [id_sprite];
//Recoger el último
//m_redener.sprite = sprite_list.Last ();
//Recoger el primero
//m_redener.sprite = sprite_list.First();
//………..
}
}

Leave a Reply

Your email address will not be published. Required fields are marked *