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 necesitemos , 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
- En el proyecto , botón derecho Create -> Sprite Atlas
- Podemos crear un Atlas desde, Una carpeta, un Sprite Sheet o desde un Sprite o grupo de sprites
- Es útil reunir todos los sprites de una carpeta y crear el atlas utilizando esa carpta
- Con el Atlas seleccionado arrastramos la carpeta a Objects for Packing
- 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.
- Pulsamos en Pack Preview y Unity generara el Atlas, reducirá al máximo los espacios vacíos.
Para usar un Sprite Atlas
- Debemos tener un Sprite Atlas creado
- Crearemos un script llamado Gestiona_Atlas
- Creamos un Objeto vacío llamado GestionAtlas y le añadiomos el script
- Como hijo del elemento metemos un Sprite , Boton derecho 2D -> Sprite
- 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();
//………..
}
}
The ad is displayed on the page
current post: Unity: Crear Atlas, ID: 2222
Ad: Anuncio2 (2573)
Placement: After Content 2 (after-content_2)
Display Conditions
Ad | wp_the_query | |
---|---|---|
term_id | 0 | |
taxonomy | 0 | |
is_main_query | 1 | 1 |
is_rest_api | 0 | |
page | 0 | 1 |
numpages | 0 | 1 |
is_archive | 1 | |
is_search | 1 | |
is_home | 1 | |
is_404 | 1 | |
is_attachment | 1 | |
is_singular | 1 | 1 |
is_front_page | 1 | |
is_feed | 1 |
Find solutions in the manual