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;34public class HeatmapRecorder: MonoBehaviour5{6public Transform playerTransform;7public float recordInterval = 0.1f;8private List<Vector3> playerPositions = new List<Vector3>();9private float recordTimer = 0f;1011void Update()12{13recordTimer += Time.deltaTime;14if (recordTimer >= recordInterval)15{16playerPositions.Add(playerTransform.position);17recordTimer = 0f;18}19}2021public 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.
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: MonoBehaviour2{3public int gridWidth = 10;4public int gridHeight = 10;5public float cellSize = 1f;6private int[,] heatmapData;78public void GenerateHeatmap(List<Vector3> positions)9{10heatmapData = new int[gridWidth, gridHeight];1112foreach (Vector3 pos in positions)13{14int gridX = (int)(pos.x / cellSize);15int gridY = (int)(pos.z / cellSize);1617if (gridX >= 0 && gridX < gridWidth && gridY >= 0 && gridY < gridHeight)18heatmapData[gridX, gridY]++;19}20}2122void OnDrawGizmos()23{24if (heatmapData == null) return;2526for (int x = 0; x < gridWidth; x++)27{28for (int y = 0; y < gridHeight; y++)29{30float intensity = heatmapData[x, y] / 100f; // Normalize31Gizmos.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.
0 yorum