RAM Anda adalah batas Anda .
Tes berikut dilakukan pada sistem dengan spesifikasi ini:
- Intel i5-6600
- RAM 16 GB
- NVIDIA GeForce GTX 1070
- Windows 7 Home Premium
Berikut ini adalah skrip yang saya jalankan yang menumbuhkan tilemap dengan mengisinya dengan ubin tunggal (32x32 piksel). Metode Grow()
menambahkan kolom lain dan baris lain ke peta saat ini. Metode dipanggil 100 kali setiap pembaruan.
public class TileTest : MonoBehaviour {
public Tile tile;
private Tilemap tilemap;
public int currentSize;
void Start () {
tilemap = GetComponent<Tilemap>;
Grow();
}
void Update() {
for (var i = 0; i < 100; i++) {
Grow();
}
Debug.Log(currentSize);
}
private void Grow() {
for (int x = 0; x < currentSize; x++) {
tilemap.SetTile(new Vector3Int(x, currentSize, 0), tile);
}
for (int y = 0; y < currentSize; y++) {
tilemap.SetTile(new Vector3Int(currentSize, y, 0), tile);
}
tilemap.SetTile(new Vector3Int(currentSize, currentSize, 0), tile);
currentSize++;
}
}
Setelah beberapa menit, komputer saya kehabisan memori dan Unity crash. Pada titik itu berada di 8400x8400 (70 juta) ubin dan Unity.exe mengkonsumsi sedikit di atas 11 GB RAM menurut task manager.
Nah, tapi bagaimana dengan peta yang jarang ?
Berikut ini skrip berbeda yang menempatkan ubin tunggal pada peningkatan koordinat x dan y dalam penambahan 100 ubin:
public class TileTest : MonoBehaviour {
public Tile tile;
private Tilemap tilemap;
public int currentSize;
void Start () {
tilemap = GetComponent<Tilemap>();
}
void Update() {
tilemap.SetTile(new Vector3Int(currentSize, currentSize, 0), tile);
currentSize+= 100;
}
}
Jejak memori Unity.exe sebenarnya meningkat sangat sedikit, yang mengisyaratkan bahwa sel tileset kosong hampir tidak memerlukan RAM. Namun, FPS terus jatuh saat tileset tumbuh. Ini mencapai 60 Fps pada 30000x30000, 30 Fps pada 60000x60000 dan 15 Fps pada 90000x90000. Fps tetap rendah ketika saya menghapus skrip saat tes-game berjalan. Jadi perlambatan ini bukan karena mengubah tilemap. Itu hanya dari rendering itu. Jadi ketika Anda ingin membuat gim dunia terbuka yang sangat besar, Anda mungkin harus menggunakan beberapa tilemaps kecil yang Anda buat dan hancurkan saat runtime.
Kesimpulan: Tilemaps yang besar tetapi sebagian besar kosong tidak menggunakan banyak RAM, tetapi merupakan hambatan rendering , bahkan ketika sebagian besar tidak ada dalam viewport kamera.
Saya kemudian bereksperimen dengan skrip ini yang menghasilkan tilemaps dengan ukuran tertentu:
public class TileTest : MonoBehaviour {
public Tile tile;
public int xSize;
public int ySize;
void Start () {
Tilemap tilemap = GetComponent<Tilemap>();
for (int x = 0; x < xSize; x++) {
for (int y = 0; y < ySize; y++) {
tilemap.SetTile(new Vector3Int(x, y, 0), tile);
}
}
}
}
Saya menggunakan skrip ini untuk menghasilkan peta 8192x8192. Butuh beberapa menit, tetapi ketika skrip selesai, itu berjalan pada 95 Fps mantap.
Kesimpulan: Peta dengan jutaan ubin layak, setidaknya pada PC game .