Aslında dediğin olay Roblox oyun motoruyla yapılabiliyor, bu oyun motoru oyuncular tarafından Minecraft ile aynı kefeye konuluyor çoğu zaman. Eh yanlış da değiller çünkü içerisinde barındırdığı oyunlar %90 küçük çocuklara hitap ediyor. Ben bu motorla geliştirme yapan taraftan olduğum için oyuncularla hiç muhatap olmuyorum, en son doğru düzgün 2014 yılında oyun olarak oynuyordum o yıldan beridir ağırlıklı oyun geliştirme. Bu sebeple yazımda sadece fizik-grafik motoru tarafından bakacağım.
Fizikle başlayalım, bahsettiğin %100 fizikle çalışma olayını yapan da var (ilk başlarda ben) ama geliştiricilerin büyük çoğunluğu saf fizik kullanmaktansa script+fizik kullanmayı tercih ediyor, ben şuan ikinci gruptanım. Neden saf fiziğin dezavantajlı olduğuna gelecek olursak da oyun motoru 2004’ten beri sürekli geliştirile geliştirile bugünkü halini aldı, dolayısıyla gördüğüm en kötü optimizasyona sahip motor (LOD kavramı yıl 2021 anca gelecek bekliyoruz, GTA’da uçakla uçarken bilgisayarın en ince ayrıntısına kadar sokakları renderladığını düşünün neyi kastettiğim anlaşılacak). Sırtımızı tamamen fiziğe yasladığımızda bu bize yüksek memory kullanımı, yüksek ping ve düşük fps olarak geri dönüyor. Belki boş haritada 1 tren sıkıntı yaratmaz ama train simulator klasmanında bir oyun tasarlamaya kalktığımızda 10 fps’leri görebiliyoruz.
Deney olsun diye az önce şekildeki gibi bir demiryolu parkuru hazırladım:
Aracımızı da şu şekilde basitçe ayarladım:
Ardından tekerleklerin merkez noktalarını ortadaki dikdörtgen parçaya menteşe (hinge) modifieri ile bağladım, bu sayede itildiğinde tekerlekleri dönerek sürtünme ile durana kadar hareketine devam edecek. Herhangi bir node,curve vb. takip etme sistemi olmadığı için de (script desteğiyle yapılabiliyor) tekerleklerin içine raydan çıkmasını engelleyecek daha büyük yarıçaplı bir silindir yerleştirdim. Basit bir vagon yapmış olduk yani.
Asıl kısım bundan sonra lokomotife çevirmeyle başlıyor, Robloxa ne zaman geldiğini bilmediğim açısal hız modifieri gelmiş yani anladığım kadarıyla tekerleklere ayrı ayrı dönme isteği verebiliyoruz. Fakat yeni modifierlara tam hakim olmadığım için script yardımı aldım, üstte yeni eklediğim koltuğa (seat) oturup W S tuşlarına basınca mavi kuvvet vektörü değişiyor, bir nevi arkadan itiyormuşuz gibi düşünülebilir ama vektör itiyor biz oturuyoruz.
Aracın işleyişi ise aşağıdaki gibi, tekerleklerin döndüğü belli olsun diye meşhur missing texture şeysinden yapıştırdım. Tekerlekler ileri hareket+araç ağırlığı+rayla teker arasındaki sürtünme sayesinde dönüyor, herhangi bir hıza bağlı dönme algoritması mevcut değil.
Bu anlattığım fizik kısmıydı, gelelim grafik kısmına. Oyun motoru size istediğiniz şeyi yapmak için belirli objeler sunuyor (dikdörtgen prizma, üçgen prizma, silindir ve küre), ayrıyeten ister obj ve fbx formatlı modelleri Roblox’a convertleme imkanı veriyor. Bu sayede gerçekte olan şeyleri birebir aktarıp kullanabiliyorsunuz, gerçekte bulunan yerleri yapabiliyorsunuz. Örneğin hobi amaçlı geliştirdiğim bir Aksaray-Kocatepe metro oyunum vardı, grafik olarak iyiydi ama oynanış için kod yazacak kadar iyi değildim (mesela tren spawnlama sistemi kodlayamazdım), bu sebepten yarıda bıraktım. Resimlerle baş başa bırakayım sizleri
ABB Tren seti
Aksaray istasyonu
Bayrampaşa istasyonu
Eh, uzun lafın kısası böyle bir şey var, oyunun kendi kodlamasını bilmeyenin de kullanabileceği bi program olması güzel, unity veya unrealdeki gibi uğraşmaya gerek yok, tek tıkla karakteriniz spawn oluyor, tek bir dikdörtgen prizmanın boyutunu değiştirip kopyalayıp renklendirip vs. attığım resimlerdeki gibi görüntüler elde etmek çok kolay. Fakat optimize olmayışıyla, glitchleriyle “alternatifi olsa bir an önce geçerim” dedirtiyor.