İçeriğe geç
Blog

Telemetri Olmadan Zorluk Eğrisini Okumak: Saha Notları

Analitik altyapısı kurmadan, cihazda tutulan basit oturum kayıtları, oyuncu videoları ve mağaza yorumlarıyla bir seviyenin nerede kırıldığını okumanın yöntemi.

IIlhan Seyhan6 dk okuma1 görüntülenme

Bir seviyenin nerede kırıldığını görmek için pahalı bir analitik yığınına ihtiyacınız yok; ihtiyacınız olan şey elinizdeki üç kaba veri kaynağını doğru sırayla okumak. Bu yazıda cihazda tutulan basit oturum kayıtlarından, oyuncu videolarından ve mağaza yorumlarından hangi sinyallerin işe yaradığını, hangilerinin yanılttığını ve bir seviyeyi yeniden tasarlamaya karar vermek için nasıl bir eşik kurabileceğinizi anlatıyoruz.

Neden telemetri kurmadan başlamak mantıklı

Tam teşekküllü bir olay (event) telemetrisi kurmak tek başına bir proje: şema tasarımı, sürüm uyumluluğu, izin ve gizlilik metinleri, veri saklama, bir de o veriyi okuyacak pano. Küçük bir ekipte bu iş, tasarım kararını haftalarca geciktirir. Oysa zorluk eğrisiyle ilgili ilk sorular kabadır ve kaba veriyle cevaplanır:

  • Oyuncular hangi seviyede bırakıyor?
  • Bıraktıkları yerde kaybediyorlar mı, yoksa sıkılıyorlar mı?
  • Kaybediyorlarsa aynı hatayı mı tekrarlıyorlar, farklı hatalar mı yapıyorlar?

Bu üç soruya cevap verebilen en küçük araç seti, birkaç saat içinde kurulabiliyor.

Kaynak 1: cihazda tutulan oturum kaydı

En ucuz veri, oyunun kendi içinde ürettiği kayıt. Sunucu gerekmez: her denemenin sonunda tek satırlık bir JSON yazan bir dosya yeterli. Unity tarafında Application.persistentDataPath cihazda yazılabilir bir dizin verir, dolayısıyla test yapısında kayıt dosyasını oradan alabilirsiniz.

using System;
using System.Globalization;
using System.IO;
using UnityEngine;

public static class RunLog
{
    static readonly string FilePath =
        Path.Combine(Application.persistentDataPath, "runs.jsonl");

    public static void Write(string level, string outcome,
                            float seconds, int attempt, int livesLeft)
    {
        string line = string.Format(CultureInfo.InvariantCulture,
            "{{\"t\":\"{0}\",\"level\":\"{1}\",\"outcome\":\"{2}\"," +
            "\"sec\":{3:F1},\"attempt\":{4},\"lives\":{5}}}",
            DateTime.UtcNow.ToString("o", CultureInfo.InvariantCulture),
            level, outcome, seconds, attempt, livesLeft);

        File.AppendAllText(FilePath, line + "\n");
    }
}

// Seviye bittiğinde:
// RunLog.Write("w1-l7", "lose", 84.3f, 3, 0);

Toplama tarafı da aynı ölçüde basit kalabilir. Onlarca test dosyasını okumak için bir tabloya ihtiyacınız yok:

import json, statistics
from collections import defaultdict

runs = [json.loads(l) for l in open("runs.jsonl") if l.strip()]
by_level = defaultdict(list)
for r in runs:
    by_level[r["level"]].append(r)

for level, rs in sorted(by_level.items()):
    win = sum(1 for r in rs if r["outcome"] == "win") / len(rs)
    med = statistics.median(r["sec"] for r in rs)
    last = statistics.median(r["attempt"] for r in rs)
    print(f"{level}: n={len(rs)} kazanma={win:.0%} "
          f"ortanca_sure={med:.0f}s ortanca_deneme={last:.0f}")

Bu kayıttan çıkarılabilecek dört metrik, ilk turda fazlasıyla yeterli: seviye başına kazanma oranı, kazanma için gereken ortanca deneme sayısı, denemenin ortanca süresi ve son görülen seviye. Dördüncüsü en değerlisi, çünkü terk noktasını gösteren tek sinyal odur.

Kaynak 2: oyuncu videoları

Sayılar bir seviyenin zor olduğunu söyler, videolar nedenini söyler. Kayıt dosyası "üçüncü dalgada kaybetti" der; video, oyuncunun o dalgada kulesini yanlış yere koyduğunu, menzil göstergesini hiç açmadığını veya para biriktirip hiç harcamadığını gösterir. Bunlar tasarım kararına doğrudan çevrilebilen gözlemler.

Video izlerken not tuttuğumuz üç şey var:

  1. İlk tereddüt anı. Oyuncunun ekrana bakıp hiçbir şey yapmadığı ilk üç saniyelik boşluk, çoğu zaman zorluktan değil belirsizlikten kaynaklanır.
  2. Kullanılmayan mekanik. Oyuncu elindeki bir aracı hiç kullanmıyorsa, seviye o araca ihtiyaç duyacak şekilde tasarlanmış olsa bile zorluk hesabınız geçersizdir.
  3. Kaybettikten sonraki ilk hareket. Hemen yeniden deniyor mu, menüye mi dönüyor, ayarları mı açıyor? Bu, öfke ile pes etme arasındaki farkı gösterir.

Thornguard: Tower Defense gibi dalga tabanlı bir yapıda bu üç not, "dalga 3 zor" cümlesini "dalga 3'te oyuncu yavaşlatma kulesinin işe yaradığını fark etmemiş" cümlesine dönüştürür. İkincisiyle bir şey yapabilirsiniz.

Kaynak 3: mağaza yorumları

Mağaza yorumları en gürültülü kaynak, ama tek gücü var: oyuncunun kendi kelimeleri. Yorumları tek tek okumak yerine kelime gruplarına göre saymak daha iyi sonuç verir — "anlamadım", "nasıl", "neden kaybettim", "sıkıcı", "çok uzun" gibi ifadeleri ayrı kovalara koyup hangi kovanın büyüdüğüne bakmak gibi. Zorlukla ilgili şikâyetlerin hangi kovaya düştüğü, çözümün zorluk ayarında mı yoksa anlatımda mı olduğunu belirler.

Yanıltıcı çıkan sinyaller

"Çok zor" genellikle "anlamadım" demektir

En sık karşılaşılan yanılgı bu. Oyuncu kaybettiğinde kaybın sebebini göremiyorsa, bunu zorluk olarak adlandırır. Çözümü sayı düşürmek değil, geri bildirimi netleştirmek: hasarın nereden geldiğini göstermek, kaybedilen turda son hamleyi vurgulamak, arayüzde önemli bilgiyi büyütmek. Kart oyunlarında bunun kaynağı doğrudan görsel okunabilirlik olabiliyor; bu konuya Kart Arayüzü Tasarımı: Okunabilirlik mi Estetik mi? yazısında ayrıca girmiştik.

Ortalama süre neredeyse hiçbir şey anlatmaz

Bir seviyede iki oyuncu grubu olur: hızlıca kaybedenler ve uzun uğraşanlar. Ortalama bu ikisinin ortasında, hiçbirini tarif etmeyen bir sayıda durur. Ortanca ve dağılım gerekir. Uydurma ama şekli tanıdık bir örnek: 40 saniyede kaybeden bir küme ile 200 saniyede kazanan bir küme, 120 saniyelik bir ortalama üretir ve o 120 saniyeye bakan tasarımcı hiçbir sorun görmez.

Terk noktası, zorluk noktası ile aynı yer değildir

Oyuncular bir seviyede pes ettiğinde, kararın tohumu genellikle iki üç seviye öncesinde atılmıştır: sabırlarını orada tükettiler, son seviye sadece bardağı taşırdı. Bu yüzden terk edilen seviyeyi kolaylaştırmak çoğu zaman işe yaramaz; ondan önceki seviyelerin ritmine bakmak gerekir.

Tek video, genellenebilir veri değildir

Bir oyuncunun takıldığı yer güçlü bir hipotez üretir, kanıt üretmez. Videoyu hipotez kaynağı, kayıt dosyasını doğrulama kaynağı olarak kullanmak; ters sırada yapıldığında hem zaman hem de tasarım kaybettiren bir hataya dönüşüyor.

Şikâyet eden oyuncu, bırakan oyuncu değildir

Yorum yazan kişi hâlâ oynuyordur. Sessizce bırakanlar hakkında hiçbir yorum bilgisi vermez; onlar yalnızca son görülen seviye verisinde görünür.

Küçük ipucundan seviye revizyonuna: karar eşiği

Az veriyle çalışırken en büyük risk, gürültüye bakıp tasarımı bozmak. Bunu engellemek için önümüze koyduğumuz kural basit: bir seviyeye dokunmak için üç kaynaktan en az ikisinin aynı yöne işaret etmesi gerekir.

  • Kayıt dosyası o seviyede bir kırılma gösteriyor (kazanma oranı komşu seviyelere göre belirgin düşük, ya da son görülen seviye orada yığılıyor).
  • En az iki farklı oyuncu videosunda aynı hata veya aynı tereddüt tekrarlanıyor.
  • Yorumlarda o bölgeye dair ifadeler aynı kovada birikiyor.

İkisi tuttuğunda değişikliği tek değişkenle yapmak gerekiyor: ya düşman sayısı, ya süre, ya başlangıç kaynağı, ya da anlatım. Aynı turda üç şeyi birlikte değiştirirsek, sonraki ölçümde hangisinin işe yaradığını bilemeyiz. Bu, az veriyle çalışan bir ekip için lüks değil zorunluluk.

Ölçmesi kolay, sinyali güçlü üç değişiklik

Mütevazı araçlarla en net sonuç veren müdahaleler genelde şunlar oluyor:

  • Kaybın sebebini göstermek. Yeniden dene ekranına "neden kaybettin" satırı eklemek, zorluk şikâyetlerini anlatım şikâyetlerinden ayırır.
  • Yeni mekaniği tek başına öğretmek. Bir mekaniğin ilk göründüğü seviyede başka hiçbir yeni şey olmasın. Kart Üçlüsü gibi kural setinin kendisi sade olan oyunlarda bile, iki yeni kavramın aynı ekranda buluşması ölçümü bulanıklaştırır.
  • Zorluğu sıçratmak yerine merdivenlemek. Aynı zorluk artışını iki seviyeye bölmek, çoğu zaman tek seviyeyi kolaylaştırmaktan iyi sonuç veriyor.

Bu yöntemin sınırları

Dürüst olalım: cihazda tutulan kayıt, oyuncunun yayınlanmış oyununda size ulaşmaz. Bu yöntem test yapıları, atölye oturumları ve gönüllü oyuncular için çalışır; onlarca binlerce oyuncunun davranışını görmek istiyorsanız sonunda gerçek bir olay telemetrisi kurmanız gerekir. Ama sırayı tersine çevirmeye değer: hangi olayları toplayacağınızı, elle topladığınız küçük veriyle bir kez düşündükten sonra çok daha iyi bilirsiniz. Ölçmek istediğiniz şeyi bilmeden kurulan telemetri, dolu ama okunmayan bir pano üretir.

Kısacası: kayıt dosyası nerede, video neden, yorumlar oyuncunun bunu nasıl adlandırdığını söylüyor. Üçünü ayrı ayrı ciddiye alıp yalnızca kesiştikleri yerde tasarıma dokunmak, elimizdeki en küçük araç setinden çıkabilecek en sağlam karar üretme biçimi.

Paylaş:

Yorumlar

İlk yorumu siz yapın.