Tanshaydar'ın Mekânı
Başka bir şey yok
Kategori: Oyun Geliştirme, Paralycid, Yazılım

‘Asset Server’dan Ümidimi Kestim, Artık ‘Git’ Zamanı

asset-server1
Not: On bilgi olması açısından ->Versiyonlama Sistemi Nedir?
Uzun bir süre önce, Paralycid‘i geliştirirken nasıl bir versiyonlama sistemi kullanmak istediğimi yazmıştım. O zamanlar Unity’nin 4.x versiyonunu kullanıyordum, ve dürüst olmak gerekirse, Asset Server yazılım olarak hiç güncellenmiyor olsa da, seviyordum.

“Neden Git kullanmıyorsun ki?” diye de sormadı kimse. Ki zaten Asset Server’ın Unity3D kullanılarak geliştirilen projeler için en uygun versiyonlama sistemi çözümü olduğuna inanıyordum. Yine de Unity’yi sürekli yeniden başlatma gerekliliği gibi çok temel problemlere göz yummak zorunda kaldığımı itiraf etmeliyim (ama pek de şikâyetçi olduğum söylenemez çünkü editör 32 bit uygulamaydı ve 2.5GB RAM kullanımına yaklaşınca editör çöküyordu, yeniden başlatma sistemi rahatlatıyordu).


Tam zamanlı oyun geliştiricisi değilim, asıl işim oyun geliştirmek de değil. Bir yazılım firmasında yazılım mühendisi olarak çalışıyorum. Asıl işim, tam zamanlı işim bu.
O yüzden eve geldiğimde, keyif aldığım işlerle uğraşmak istiyorum. Dolayısıyla Paralycid’in geliştirilmesi oldukça yavaş gidiyor. Asset Server ise bizim için mükemmel bir motivasyon kaynağıydı. Herkesin yaptığı değişiklik görülüyor, her yeni değişiklikte test etme isteği uyandırıyor, oyunun yavaş da olsa büyüdüğünü ve olgunlaştığını görüyorduk. Ama sonra kredi kartımın süresi tükendi ve Amazon yeni kredi kartımın gelmesini beklemek yerine ilk ödeme gecikmesinde EC2 hesabımı dondurmaya karar verdi. “Acaba daha iyi bir VPS mi bulsam?” diye düşünmeye o zaman başladım. Ama ne yapacaktım ki? Başka bir sunucu bulup ona da mı Asset Server yükleyecektim?

Bu yıl Nisan ayına hızlıca geçiş yapalım. Freelance olarak aldığım ve baş programcı olarak çalıştığım (birkaç önceki blog yazılarımda bahsettiğim oyun projesi) ve bu yazıyı yazdığım süreçte halen geliştirilmesi devam eden projede hiçbir versiyonlama sistemi kullanmıyordum. Bunun asıl sebebi ise test edilebilir sürümler ile proje dosyalarını zaten belirli aralıklarla test etme zorunluluğunda olmam. Yani halihazırda elimde versiyonlanmış dosyalar mevcuttu. Bir de zaten o zamanlar tek programcı olduğumdan, birlikte çalışma ortamı kurmama gerek yoktu. Bu, ikinci programcı işin içine katılana kadar böyleydi. Artık hem beraber çalışma ortamı hem de versiyonlama sistemi kullanmam gerekiyordu.

Unity Pro lisansı var mı diye sordum yeni katılan arkadaşa. Evet deseydi, halihazırda var olan Asset Server’da yeni bir proje açarak onu da geliştirici olarak ekleyecek, oradan beraber devam edecektik. Ama maalesef (belki de şansıma?) Pro lisansına sahip değildi, ve ben de beraber çalışma ortamı için başka bir çözüm aramak zorunda kaldım. Tabi ki en başta Git geldi aklıma, ama piyasada ücretsiz kullanabileceğim tüm Git servislerinin repo sınırı vardı (genellikle 1 GB) ama benim elimdeki proje klasörünün boyutu çoktan 2.4 GB’ı bulmuştu. Elbette bu dosyaların birçoğunun yeniden oluşturulabilir yerel dosyalar olduğunu biliyordum, ama Unity’nin 4.x serisinin sonuna kadar süren öyle bir sorunu vardı ki, sahne objelerinin referans script’lerinin tüm bilgisi Library klasörü altında tutuluyordu.
Kısaca, eğer Library klasörünü versiyonlama sistemi içerisine dahil etmezseniz, tüm sahne objelerinizin eklenmiş script bilgilerini kaybetme ihtimali mevcut olabilirdi. Eğer tamamlanmış ve binlerce objeden oluşan bir sahne dosyanız vardıysa, hadi buyrun cenaze namazına. “Referenced script behavior is missing!” hatası efsanevi bir hataydı. (Gerçi bu tarz çözümler de mevcuttu; ama problemin var olmaması gerekiyordu).

Sonra…
Sonra duydum ki Unity, artık 5 versiyonunda Library klasörüne olan tüm bağımlılığını kaldırmıştı. Library klasörü bundan sonra, en baştan beri olması gerektiği gibi, sadece yerel veriyi tutacaktı, ki bu veriler farklı bilgisayarlarda veya ilgili değişikliklerde yeniden üretiliyordu (olayın iç yüzü için cache server’a bir göz atın). Ben de artık bir deneyelim şunu diyerek kolları sıvadım. O zamanlar kendime ait bir VPS’im olmadığı için, gidip halihazırda aktif olarak kullandığım Bitbucket hesabımda yeni bir repo açtım. Unity’nin editör ayarlarını git için ayarladım (Force Text Mode vb.) ve SourceTree uygulamasında her şeyi kontrol ettim. Her şey güzel görünüyordu.

İlk commit’imi yaptım, uzak sunucuya gönderdim, hemen bi koşu Bitbucket hesabıma girip sonuçları gözlemledim. Unutmayın, bu freelance proje o zamanlar hard diskimde 2GB’tan fazla yer tutmaktaydı, ama Bitbucket’ta sadece 40 MB’tı!
Ne?
Allah belanı vermesin, Asset Server, ben şimdiye kadar neyle uğraşmışım böyle?

Ama sonra beraber çalışma ortamı kullanımı geldi ortaya. Unity3D 5’te bütün davranışını değiştirmişti, ama bazı eklentiler halen Library klasörüne bağımlıydı. En büyük örnek DOTween oluyordu ki benim de başımı ağrıtan oydu.
Ama ne oldu? Gör bak ne oldu? Olayın asıl sebebi Unity veya eklenti değil, Visual Studio 2013’ün kendi kafasına göre global gitignore dosyası yaratark içerisinde .dll dosyalarını versiyonlamanın dışında tutmak için satır eklemesiymiş!
İlgili satırı global gitignore dosyamdan kaldırdım ve bir baktım Unity projesi Git ile yüzde yüz uyumlu. Ama Paralycid için halen Asset Server vardı…

Ekipten Gökhan yaptığı güzel bir şeyi sunucuya göndermeye çalıştığında enteresan bir problem ile karşılaştı. Unity3D kendi ürettiği bir dosya olan NavMesh.asset dosyasını tanımlayamıyor, ne sunucudan dosyanın çekilmesine, ne de yeni bir verinin sunucuya gönderilmesine izin veriyordus.

Asset Server Hatası

Asset Server Hatası – Resimdeki bazı yerler kasıtlı olarak silinmiştir.

Bu ve bunun gibi bazı diğer hatalar (tepki süresinin çokluğu, artık 64 bite geçmiş bir editörü sürekli yeniden başlatma gerekliliği, vb…) sonunda Asset Server’dan ümidimi kesmeme sebep oldu.
Elimdeki VPS için bazı çözümler aradım, ve en sonunda GitLab kurmayı uygun gördüm.
Ayarları çektim, ssh anahtarlarını yarattım, ve voilà!
İlk commit’imi sunucuya gönderdim ve normalde Unity Asset Server ile 40 saat civarında sürecek olan işlem, bir saatten kısa sürede bitti. “Aklını seveyim Tansel” dedim, “sen bu kafayla halen nasıl hayattasın?”.

Tabi bu olayın tamamen Unity’nin hatası olduğunu söylemek doğru olur mu bilemiyorum. Ama Asset Server uygulamasını kaç yıldan beri hiç güncellemediler (2.0.1 versiyonu), cache server güncelleniyor.
Ama GitLab ve web arayüzü, ve Git sistemi genel olarak hem versiyonlama, hem beraber çalışma, hem de yedeklemeler için efsanevi bir güzellikte çalışıyor.

Artık kafam rahat. Yeni branch açma, birleştirme, geri alma… Hepsi çok kolay.
Geriye kalan tek şey oyunu bitirmek 🙂
—————————–
Birkaç aklıevvel çıkıp garip sorular sordu.
Üç yıldır hemen hemen bütün yazılım projelerinde versiyonlama sistemi olarak Git kullanıyorum.
Ama Git’in binary dosyalarda yetersiz olduğu bilinen bir gerçek.
Daha ayrıntılı bilgiye erişmek isteyen versiyonlama sistemlerinin tarihçesine bir göz atıversin. “En iyi programlama dili hangisi?” sorusuna eşdeğer sorular sormayın bana.

Söz uçar yazı kalır