Bonus:
CollectableGem
la dispozitie pe care il puteti folosi intr-un PrefabTile)Inregistrare pe Teams
Tile-urile pot fi scriptate astfel incat sa se creeze comportamente personalizate, spre exemplu in functie de vecini sau pozitia tile-ului.
Pentru a utiliza tilemaps, in primul rand trebuie definita o paleta folosind utilitarul Window → 2D → Tile Palette.
Acest utilitar va permite sa creati palete diferite pentru a construi usor tilemap-ul.
La aceasta paleta se adauga sprite-uri ce se vor putea folosi ulterior ca template-uri de desenare (brush).
Se pot folosi si brush-uri standard sau personalizate, prefab-uri etc.
Pentru a adauga un tilemap in scena, adaugati un GameObject de tipul 2D → Tilemap. Acesta va genera un Grid parinte si un tilemap.
Folosind paleta construita, se poate `picta` tilemap-ul.
Exista si posibiltatea de a folosi un prefab pentru un tile prin PrefabBrush
. Acest lucru ne permite definirea de obiecte mai complexe (scriptate, de ex pickups sau inamici) si generarea lor in tile-uri.
Se pot adauga mai multe tilemap-uri in grid (spre ex unul pentru teren, unul pentru vegetatie, inamici etc)
Un tilemap poate avea si coliziuni, prin adaugarea unei componente de Tilemap Collider 2D
.
Separarea in mai multe layere de tilemap ne ajuta sa adaugam coliziuni doar pentru elementele importante: de exemplu pot avea un tilemap cu pereti (care vor avea coliziune) si un tilemap cu elemente de podea sau decor in fundal, care de regula nu au coliziuni.
O componentă utilă este Colliderul Composite Collider
. Adăugarea acestuia Tilemap Collider 2D va fuziona toate coliderele într-o plasă de coliziune mult mai optimizată a geometriei!
Tile-urile pot fi scriptate, astfel ca se pot defini reguli pentru afisarea lor. Pentru a usura acest lucru, se poate folosi pachetul de add-on de ``2D extras`` de la unity: https://github.com/Unity-Technologies/2d-extras.
Astfel, aveti la dipozitie crearea simpla de tile-uri:
Crearea unui RuleTile va permite sa definiti usor scripturi automate de generare a terenului folosind un tile, care se afiseaza diferit in functie de amplasare.
Acest tip de tile imi permite sa definesc reguli pentru existenta sau nu a vecinilor. In functie de aceste reguli se poate folosi un sprite sau altul. X rosu inseamna ca nu trebuie sa existe, iar sageata verde indica necesitatea vecinilor.
Ouput-ul unei reguli poate fi un singur sprite, o animatie sau alegerea random a unui sprite.
Tilemaps-urile ofera, dupa cum ati vazut prin RuleTile, posibilitatea de a seta tile-urile dinamic, folosind scripturi. Asta inseamna ca se pot genera procedural tilemap-uri intregi.
Un mod usor de a genera procedural o scena, este prin folosirea de RuleTile. Astfel, se genereaza un grid care se completeaza pe alocuri cu tile-ul dinamic (RuleTile), sprite-ul afisat fiind in functie de pozitia si vecinii tile-ului curent.
Pentru a seta un tile, se poate folosi functia
using UnityEngine.Tilemaps; [Tooltip("The Tilemap to draw onto")] public Tilemap tilemap; [Tooltip("The Tile to draw (use a RuleTile for best results)")] public TileBase tile; //SetTile(position, tile) tilemap.SetTile(new Vector3Int(x, y, 0), tile);
Pentru a genera random o scena, se pot folosi tehnici precum Perlin Noise, Random Walk, Cellular Automata etc. Mai multe detalii si exemple de implementare gasiti aici: Part I Part II
De asemenea, in proiectul de starter, mai este definit un tip de tile, denumit PrefabTile, prin care practic se pot adauga prefab-uri ca tile-uri efectiv (se inlocuieste gameObjectul tile-ului cu cel al prefab-ului). Puteti verifica in Add-Ons > PrefabTile. Astfel, se pot folosi prefab-uri pentru generare automata de tile-uri.