Isı Haritası ile Level Tasarımını Test Etme

Isı haritası, oyuncuların level içinde nereyi sık ziyaret ettiğini, nerede takıldığını ve hangi bölgeleri görmezden geldiğini gösterir. Bu veriler level tasarımını geliştirmek için çok değerlidir.

Oyuncu pozisyonlarını kaydetmek için basit bir sistem kuracağız. Her karede oyuncunun konumunu bir diziye ekleyip, oyun bittiğinde bu verileri görselleştireceğiz.

Öncelikle oyuncu hareketini izleyen bir script yazalım. Unity'de böyle yapabilirsin:

1using UnityEngine;
2using System.Collections.Generic;
3
4public class HeatmapRecorder: MonoBehaviour
5{
6public Transform playerTransform;
7public float recordInterval = 0.1f;
8private List<Vector3> playerPositions = new List<Vector3>();
9private float recordTimer = 0f;
10
11void Update()
12{
13recordTimer += Time.deltaTime;
14if (recordTimer >= recordInterval)
15{
16playerPositions.Add(playerTransform.position);
17recordTimer = 0f;
18}
19}
20
21public List<Vector3> GetPositions() => playerPositions;
22}

Bu kod 0.1 saniye aralıklarla oyuncunun konumunu kaydeder. Oyun bittiğinde bu pozisyonları bir dosyaya yazabilir ya da doğrudan görselleştirebilirsin.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Görselleştirme için, level haritasını grid'e böl ve her grid hücresine kaç kez girildiğini say. Daha sık ziyaret edilen yerler kırmızı, az ziyaret edilenler mavi gösterilir:

1public class HeatmapVisualizer: MonoBehaviour
2{
3public int gridWidth = 10;
4public int gridHeight = 10;
5public float cellSize = 1f;
6private int[,] heatmapData;
7
8public void GenerateHeatmap(List<Vector3> positions)
9{
10heatmapData = new int[gridWidth, gridHeight];
11
12foreach (Vector3 pos in positions)
13{
14int gridX = (int)(pos.x / cellSize);
15int gridY = (int)(pos.z / cellSize);
16
17if (gridX >= 0 && gridX < gridWidth && gridY >= 0 && gridY < gridHeight)
18heatmapData[gridX, gridY]++;
19}
20}
21
22void OnDrawGizmos()
23{
24if (heatmapData == null) return;
25
26for (int x = 0; x < gridWidth; x++)
27{
28for (int y = 0; y < gridHeight; y++)
29{
30float intensity = heatmapData[x, y] / 100f; // Normalize
31Gizmos.color = Color.Lerp(Color.blue, Color.red, intensity);
32Vector3 pos = new Vector3(x * cellSize, 0, y * cellSize);
33Gizmos.DrawCube(pos, Vector3.one * cellSize * 0.9f);
34}
35}
36}
37}

Bu sistem oyuncuların hangi alanlara çok girdiğini, hangi bölgeleri hiç kullanmadığını gösterir. Kırmızı alanlar oyuncuların sık durduğu yerler, mavi alanlar ise görmezden geldikleri bölgelerdir. Tasarımında sıkıştırılmış alanları açabilir, boş bölgelere ise önemli öğeler yerleştirebilirsin.

Tamamen farklı oyuncu gruplarıyla test et. Başlangıç oyuncuları ile deneyimli oyuncuların davranışları çok farklı olur ve her ikisinin verisi de seviye tasarımını iyileştirmeye yardımcı olur.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz