• Buradasın

    Unity'de 2D Mobile Oyun Geliştirme ve Optimizasyon Eğitimi

    youtube.com/watch?v=ch0UpIxC2bk

    Yapay zekadan makale özeti

    • Bu video, Peak Games'te çalışan ve toplam üç senelik mobil yazılım deneyimine sahip Murat Güver tarafından sunulan bir Unity oyun geliştirme eğitim içeriğidir.
    • Video, Unity platformunda 2D mobil oyun geliştirme sürecini kapsamlı şekilde ele almaktadır. İçerik, component kullanımı, layer ve trigger kullanımı, state kontrolleri, animasyonlar, level design, cross platform optimizasyonu ve performans iyileştirmeleri gibi konuları kapsamaktadır. Özellikle "Evliya Çelebi" adlı oyun projesi üzerinden örnekler verilerek, oyun mekaniklerinin nasıl tasarlandığı ve performans optimizasyonu için hangi yöntemlerin tercih edildiği açıklanmaktadır.
    • Eğitimde ayrıca texture atlas optimizasyonu, hasetleri sadece ihtiyaç duyulduğunda yükleme, device'a teslim etme, profiler kullanımı ve statik font kullanımı gibi teknik detaylar da paylaşılmaktadır. Mobil cihazlarda (iOS ve Android) test etmenin önemi vurgulanarak, cross platform optimizasyonu için tek bir imaret kullanımı ve ekran boyutlarına göre optimizasyon teknikleri de anlatılmaktadır.
    00:04Sunum ve Kişisel Deneyim
    • Murat Güver, Unity'de 2D mobil oyun geliştirme konusunu anlatacak.
    • Şu anda Peak Games'te çalışmakta ve toplamda üç senelik mobil yazılım deneyimi bulunmaktadır.
    • Native olarak iOS yazıyor ve Unity ile dört oyun üzerinde çalışmış, bunların iki tanesi sora konmuş, biri yapım aşamasında, diğeri rafa kaldırılmıştır.
    00:48Evliya Çelebi Oyunu Hakkında
    • Libya Çelebi adında hem iOS hem Android'de çıkan bir mobil oyun geliştirmişlerdir.
    • Oyun, Evliya Çelebi'nin sağa doğru koşması, engelleri aşması, altın toplaması ve ölümsüzlük suyu kazanması şeklinde ilerlemektedir.
    • Oyun, bir animasyon filminin oyunu olarak çıkmış olup, dört farklı mekanda (İstanbul, Mısır ve Nil) geçmektedir.
    02:38Oyunun Özellikleri
    • Oyunda toplam yirmi farklı mekan ve beş farklı zorlukta kırk'tan fazla bölüm bulunmaktadır.
    • Oyun geliştirme süreci Haziran'da başlamış olup, yaklaşık beş ay sürmüş ve bir aylık araştırma süreci vardır.
    • Konuşmada component kullanımı, layer/collider/trigger kullanımı, state kontrolleri, animasyonlar ve performans optimizasyonları konuları ele alınacaktır.
    03:36Component Kullanımı
    • Unity component bazlı bir sistemdir ve projeyi geliştirirken component bazlı düşünmek faydalıdır.
    • Her şeyi inheritance ile çözmeye çalışmak yerine, fonksiyoneliteleri ayırmak için component kullanmak daha etkilidir.
    • Örneğin, mıknatıs özelliği için "Magnetic Material" adında bir component yazarak, bu component'e sahip objelerin mıknatısa doğru çekilmesini sağlayabilirler.
    05:23Fonksiyonelite Ayırma
    • Fonksiyoneliteleri ayırmak için component'ları kullanmak, kodun daha temiz olmasını sağlar.
    • Örneğin, input manager'ı (ECB) kontrol etmek için ayrı bir script ve game object kullanmak daha avantajlıdır.
    • Evliya Çelebi'nin tüm lojik kodları "Hero Script" içinde olmasına rağmen, koşma, zıplama, ateş etme gibi fonksiyonlar ayrı component'lerde tutulmuştur.
    07:43Layer ve Collider Kullanımı
    • Bir objeye birden fazla collider veya trigger koyulamaz, bu nedenle compound collider veya trigger kullanılır.
    • Ana karakter için farklı trigger'lar kullanılmıştır: fizik motoru için yürüme collider'ı, düşmanlarla etkileşim için collider'ı ve toplama için büyük collider'ı.
    • Trigger'lar, script içine hard kodular görmektense tercih edilmelidir, örneğin paralaks efektleri için trigger kullanmak daha etkilidir.
    10:52Collision Matrix
    • Layer'lar arasında collision matrix özelliği bulunmaktadır.
    • Bu özellik, editörden player setinden ulaşılabilir ve hangi triggerların birbirleriyle etkileşime girmesi gerektiğini değiştirebilirsiniz.
    • Oyunda toplanabilen objeler için ayrı bir layer bulunmaktadır.
    11:16Layer Kullanımı ve Performans Optimizasyonu
    • Önden geçen objeler için ayrı bir layer var ve toplanabilen objelerin bu dekorasyonla etkileşime girmemesi için etkileşim kapatıldı.
    • Layer kullanımı scriptten ayrım yapmayı gerektirmeden performans optimizasyonu sağlar çünkü fizik motoru hesaplama yaparken layerlar içerisinde çalışır.
    • Kameralar game objectlere tag verebilir, ancak önerilen kullanım sadece yüksek seviye şeyler için olup, taglerin kullanımı saf değil ve hata ayıklama sürecini zorlaştırabilir.
    12:34Script Kullanımı ve Tag Avantajları
    • Mıknatıs scriptinde, triggerlar birbirine değdiğinde magnetik materyal spriti olan objeleri kendine doğru çekmeye başlar.
    • Tagler yerine scriptler kullanmak daha güvenlidir çünkü tagler değiştiğinde hata alınmayabilir, özellikle compile zamanında.
    • Tagler sadece bir objeye bir kez verilebilir, bu nedenle birden fazla özellik için farklı tagler kullanmak zorunda kalınabilir.
    14:56Layerların Rendering İçin Kullanımı
    • Layerlar aynı zamanda rendering için de kullanılabilir, örneğin platformda ve Evliya Çelebi'yi render etmek için bir kamera, arka planları render etmek için ayrı bir kamera kullanılır.
    • Hareket halinde olan kamera için paralaks yapmak zor olduğu için sabit bir kamera kullanılır ve arka plan sola doğru kaydırılır.
    • Kameranın mask özelliği ile hangi layerların render edileceği belirlenebilir, böylece render edilecek objeler azalır ve performans artar.
    16:17State Controller Kullanımı
    • Oyunda çok fazla state var (kayma, zıplama, ateş etme, tabuble jump) ve bunları script içerisinde basit bir şekilde çözmektense state controller kullanmaya karar verildi.
    • State controller oyun içerisindeki eventleri dinler (yukarı tuşuna basma, ateş etme) ve hangi state'de ise o state'e iletir.
    • State controller event'i dinledikten sonra state'i değiştirir ve global bir event yayarak diğer scriptlerin state'in değiştiğini bilmesini sağlar.
    19:06Mekanizma ve Animasyon Kullanımı
    • Unity'de mekanik sistemi kullanılması önerilir, legacy system'den desteğini çekti ve çok fazla şey yapılamaz.
    • Mekanizma sistemi ana karakter ve düşmanlar için kullanıldı, ancak küçük animasyonlar için legacy sistemi (animation component) tercih edildi.
    • Animation regger özelliği ile animasyonun belli bir aşamasında trigger eklenebilir ve bu trigger scriptteki bir metodu çağırarak animasyonun üzerinde işlem yapılabilir.
    21:56Level Design Yaklaşımı
    • Level design, oyunun en zorlayıcı ve üzerinde en çok düşünülen konulardan biridir.
    • Renderman (renderlı) bir oyun yapmak kullanıcının sıkılmaması için önemlidir, ancak ekonomiyi kontrol etmek için tamamen renderlı bir oyun yapılamaz.
    • Oyun ekonomisini kontrol etmek için kullanıcıların ne kadar altın kazanması, ne kadar booster alması gerektiği gibi detaylar önemlidir.
    23:07Level Slice Sistemi
    • Oyun için küçük slice'lar (bölümler) oluşturulmuş ve bunlar birbirinin arkasına eklenerek tek bir bölüm hissi verilmiştir.
    • Oyun sırasında zorluk seviyesine göre rastgele bir slice seçilir, böylece farklı bir bölümde oynuyormuş hissi verilir.
    • Bu sistem hem development aşamasında hem de design açısından kolaylık sağlamıştır.
    24:02Level Editör Sistemi
    • Level editöründe mavi placeholder'lar platformun orada olacağına dair görsel olarak gösterilir.
    • Platformlar tut-sürükle mantığıyla çalışır, designerlar prototipleri sahneye sürükleyip yerlerini belirlerler.
    • Düşmanlar sarı, kırmızı; engeller turuncu; güçlendiriciler gri veya beyaz renklerle gösterilir.
    24:40Level Slice Görselleştirme
    • Level slice'ların bir bölümünden diğerinin başlama çizgisi olarak çizgiler kullanılır.
    • Kamera çizgisi belirli bir noktaya geldiğinde, farklı bir görsel konularak platform tek bir platform gibi gösterilir.
    • Kamera girdiğinde platformlar yerleştirilir, kameradan çıktığında ise sol taraftan her şey yok edilir ve havuza alınır.
    26:08Level Editör Avantajları ve Dezavantajları
    • Level design'ı koddan ayırmak önemlidir, çünkü level designer'ın level design yapması gerekmez.
    • Unity içerisinde level editör yapmak veya kendi başına level editör yapmak iş yükünü paylaşmak ve daha hızlı level design yapmak için avantajlıdır.
    • Dezavantajları olarak designer'ın level editörü nasıl kullanması gerektiğini anlatması ve level editör için kod yazılması gerekir.
    27:48Level Tasarım Süreci
    • Designerlar platform için önceden hazırlanan PPM'leri tutup sürükleyerek sahneye yerleştirirler.
    • Slice'ların içerisinde random özellikler bulunur, örneğin engellerin yüzde elli ihtimalle çıkması ve farklı tiplerin seçilmesi gibi.
    • Designerlar için yardımcı metotlar (create new level slice gibi) oluşturulmuştur.
    29:12Cross Platform Geliştirme
    • Oyun hem iOS hem Android için cross platform olarak geliştirilmiştir.
    • Tek bir imaret (1288) kullanılmış, telefonların çözünürlüklerini göz önünde bulundurarak en ideal ortalama seçilmiştir.
    • Retina ve retina olmayan gibi ayrı imajlar kullanılmamış, böylece dosya boyutu şişmemiş ve ekstra yük oluşmamıştır.
    30:04Ekran Boyutu ve Performans
    • Daha büyük cihazlarda daha fazla oyun alanı gösterilir.
    • Ekran boyutuna göre değişiklikler için percentage kullanılmıştır.
    • Skip'ten ayrımlar default click processor makrolarla veya conditionals metoduyla yapılmıştır.
    31:33Collider Optimizasyonu
    • Unity'de collider kullanırken basit şekiller (yuvarlak circle collider veya dikdörtgen rectangle collider) tercih edilmelidir.
    • Çok fazla kenarlı poligon collider'lar fizik motorunun hesaplamasını artırır ve FPS'yi düşürür.
    • Compound collider'lar kullanarak basit şekiller tercih edilmelidir.
    32:15Texture Atlas Optimizasyonu
    • Texture atlas, imajları tek büyük imaj içerisinde toplayarak dosya boyutunu ve GPU hafızasını optimize eder.
    • Unity'nin kendi texture atlas algoritması yeterli değildir, bu nedenle Texture Packer gibi daha iyi packing algoritmaları kullanılmalıdır.
    • Texture packer kullanımı sayesinde hafızada yaklaşık 17 MB yer kazanılabilir.
    33:47Haset Yükleme Optimizasyonu
    • Hasetleri oyun içerisinde birden yüklemek yerine, ihtiyaç duyulduğunda yüklemek daha verimlidir.
    • Çok fazla görsel yükleme, özellikle mobil cihazlarda autofuri hataları ve FPS düşüşüne neden olabilir.
    • Objeleri yeri geldiğinde sahneye koyarak gereksiz yer kaplamasını ve CPU kullanımını önleyebilirsiniz.
    34:48Cihaz Testi ve Profiler
    • Özellikle mobil cihazlarda (iOS ve Android) ayrı ayrı test edilmelidir çünkü mimarileri ve ekran kartları farklıdır.
    • FPS indikatörü kullanarak test cihazlarında FPS düşüşlerini ve sorunları kolayca görebilirsiniz.
    • Profiller kullanarak CPU, hafıza ve GPU kullanımını detaylı olarak inceleyebilirsiniz.
    36:29Statik Font Kullanımı
    • Dinamik fontlar runtime'da texture ve materyal oluşturarak takılmalar yaratabilir.
    • Oyun sahnesinde statik font kullanmak, runtime'daki hesaplamaları editörde yaparak performansı artırır.
    • Statik font kullanmak için ayarlar bölümünden "create editable copy" seçeneği kullanılmalıdır.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor