Unity mi React Native mi? Oyun ve Uygulama İçin Doğru Araç

Mobil ürününüz oyun mu, oyunlaştırılmış bir uygulama mı? Unity, React Native ve SpriteKit arasında ana ekran, platform, içerik ve ekip sorularıyla seçim yapın.

· 5 dk

Bir eğitim girişimi düşünün. Çocuklara çarpım tablosunu öğreten bir uygulama yapmak istiyorlar: her doğru cevapta bir yıldız, her on yıldızda bir rozet, haftalık bir sıralama tablosu ve ebeveynin ilerlemeyi gördüğü bir ekran. Ekipten biri "bu bir oyun, Unity ile yapalım" diyor, bir başkası "bu bir uygulama, React Native yeter" diye karşı çıkıyor. İkisi de kısmen haklı, ve tartışma haftalarca sürebiliyor.

Bu sorunun cevabı hangi aracın "daha iyi" olduğunda değil, ürünün aslında ne olduğunda saklı. Unity bir oyun motorudur: her karede sahneyi yeniden çizer, fizik ve animasyon için kurulmuştur. React Native ise arayüz odaklıdır: listeler, formlar, metin ve düğmelerden oluşan ekranları tek kod tabanından iOS ve Android'e taşır. Apple'ın SpriteKit'i de yalnızca iOS'a çıkacak hafif 2D oyunlar için üçüncü bir seçenektir. Aşağıdaki beş soru, bu üçü arasında karar vermeyi kolaylaştırır.

1. Kullanıcı zamanının çoğunu hangi ekranda geçiriyor?

Ürünün kâğıda çizilmiş ekranlarını yan yana koyun ve kullanıcının en uzun süre baktığı ekranı işaretleyin. Bu ekran sürekli hareket eden bir sahne mi, yoksa dokunulup geçilen bir arayüz mü?

Çarpım tablosu örneğinde ana ekran bir soru, dört cevap düğmesi ve küçük bir kutlama animasyonudur. Bu, oyun gibi hissettiren ama özünde arayüz olan bir ekrandır; React Native bunu rahatça taşır. Kelime, kart ve parti oyunları da çoğu zaman bu gruptadır: oyunun kendisi metin, kart ve sıra mantığından oluşur. Öte yandan karakterin zıpladığı, engellerin kaydığı, çarpışmaların hesaplandığı bir platform oyununda ana ekran her saniye onlarca kez yeniden çizilir. Burada bir oyun motoru işin doğal yeridir.

Kaba bir kural: ana ekranda "dokun, sonuç gör" döngüsü varsa arayüz aracıyla başlayın; "sürekli hareket eden bir dünya" varsa oyun motoruyla.

2. Fizik, 3D ya da çok sayıda nesne var mı?

Bazı ihtiyaçlar kararı neredeyse tek başına verir. Yerçekimi, sekme, çarpışma gibi fizik kuralları, üç boyutlu sahneler, kamera hareketi ya da ekranda aynı anda yüzlerce parçacık gerekiyorsa Unity bunları hazır getirir. Aynı şeyleri arayüz odaklı bir araçta sıfırdan kurmak hem uzun sürer hem de eski telefonlarda takılma riskini artırır.

Tersi de geçerlidir. Uzun metinler, ayar ekranları, giriş ve abonelik akışları, profil sayfaları, ödeme formları Unity'de kurulabilir ama orada doğal değildir. Erişilebilirlik ayarları, sistem yazı tipi boyutu, klavye davranışı gibi telefonun kendi arayüz alışkanlıkları bir oyun motorunda çoğu zaman elle taklit edilmek zorunda kalır. Ürününüzün yarısı formsa, bu yarının maliyetini hesaba katın.

3. Hangi platformlara, hangi sırayla çıkacaksınız?

Yalnızca iPhone kullanıcılarını hedefleyen sade bir 2D bulmaca için SpriteKit hafif ve hızlı bir başlangıçtır; Apple'ın kendi aracıdır, uygulama boyutu küçük kalır ve sistemle uyumu sorunsuzdur. Ama yol haritasında Android de varsa, SpriteKit ile yazılan oyunun Android sürümü ayrı bir projedir.

İki platforma aynı anda çıkmak gerekiyorsa seçenek ikiye iner. Arayüz ağırlıklı ürünlerde React Native tek kod tabanından iki mağazaya çıkar. Fizik ya da 3D gerektiren oyunlarda Unity aynı motoru iki platformda çalıştırır. Platform sorusunu en başta netleştirmek önemlidir, çünkü "önce iOS, sonra bakarız" diye başlayan projelerin çoğunda Android sorusu altı ay sonra ve daha pahalı bir hâlde geri gelir.

4. Yayından sonra içerik nasıl eklenecek?

Bir oyunun asıl işi çoğu zaman mağazaya çıktıktan sonra başlar: yeni bölümler, sezonluk etkinlikler, zorluk ayarı, reklam sıklığı. Bunların her biri için yeni bir sürüm mü yayınlayacaksınız, yoksa uzaktan mı değiştireceksiniz?

Bu soru araç seçiminden çok mimariyi ilgilendirir, ama aracı da etkiler. Bölümleri kodun içine gömmek yerine veri olarak tanımlamak (hangi taş nerede, hedef kaç puan) ve Firebase Remote Config gibi bir servisle uzaktan ayarlamak, her üç araçta da mümkündür. Önemli olan, bunu ilk sürümde planlamaktır. Bölüm tasarımcısının yeni bir bölüm eklemek için geliştiriciye ihtiyaç duymadığı bir yapı, yayından sonraki her ayın hızını belirler. Unity'nin sahne düzenleyicisi tasarımcılara görsel bir çalışma alanı verir; arayüz odaklı ürünlerde ise aynı iş genelde basit bir içerik dosyası ya da yönetim paneliyle çözülür.

5. Ekibiniz kim, ürünü kim büyütecek?

Teknoloji kararı, ürünü önümüzdeki iki yıl kimin geliştireceğinden bağımsız değildir. Şirket içinde web tarafında JavaScript ya da TypeScript bilen bir ekip varsa, React Native onların bildiği dile yakındır ve ürünü devralmaları kolaylaşır. Unity C# ile çalışır ve oyun motoru alışkanlıkları ister; yalnızca bu ürün için Unity geliştiricisi aramak, işe alım ve bakım tarafında ayrı bir yük demektir.

Aynı şekilde, ürünün yanında bir web paneli, bir ebeveyn ekranı ya da bir yönetim arayüzü olacaksa, bunların hepsini aynı dilde ve benzer araçlarla yazmak bakım işini sadeleştirir. Çarpım tablosu örneğinde ebeveyn paneli, sıralama tablosu ve abonelik ekranı oyunun kendisinden daha fazla kod tutabilir.

Karışık durumlar

Her ürün bu beş soruya temiz cevap vermez. Arayüzün büyük kısmı form ve liste, ama içinde tek bir mini oyun olan uygulamalar vardır. Burada iki yaklaşım öne çıkar: mini oyunu arayüz aracının animasyon kütüphaneleriyle sade tutmak ya da oyun kısmını ayrı bir modül olarak geliştirip uygulamanın içine yerleştirmek. İkincisi daha esnektir ama iki teknolojiyi birlikte yaşatmanın bakım maliyetini getirir; bu yüzden ancak oyun kısmı gerçekten fizik ya da 3D istiyorsa tercih edilmelidir.

Kararsız kaldığınızda en ucuz çözüm, ana ekranın birkaç günlük oynanabilir bir prototipini yapıp gerçek bir telefonda denemektir. Kâğıt üzerinde eğlenceli görünen bir döngünün elde nasıl hissettirdiği, hangi aracın gerektiğini çoğu zaman tartışmadan daha net gösterir.

Kısaca

Araç seçimine "hangisi daha iyi" diye değil, "ürün ne" diye başlayın. Ana ekran dokunulup geçilen bir arayüzse React Native, sürekli hareket eden bir sahneyse Unity, yalnızca iOS'a çıkacak sade bir 2D oyunsa SpriteKit genellikle doğru başlangıçtır. Fizik ve 3D ihtiyacı, hedef platformlar, yayından sonraki içerik planı ve ürünü büyütecek ekip bu kararı netleştirir. Emin değilseniz, birkaç günlük bir prototip haftalarca süren bir tartışmadan ucuzdur.

Kendi oyunlarımızda (Arrowy, Lines of 7, Neon Pulse ve Who is Imposter) da aracı her seferinde türe göre seçiyoruz; mobil oyun geliştirme hizmetimizde SpriteKit, Unity ve React Native arasında kararı ilk prototipten önce birlikte veriyoruz.

Böyle bir proje mi planlıyorsun?

10 adımda planla