e-bergi dünyasından herkese merhaba. Bu ay, şu sıralarda çok kullanılan 3 boyutlu bir oyun geliştirme motoru olan Unity 3 hakkında bilgi vereceğim. Yazıma biraz Unity'nin geçmişiyle başlamak istiyorum.

Nereden Nereye

Unity 44 kişilik çekirdek bir kadro tarafından 2001 yılında San Francisco'da geliştirilmeye başlandı. 2010 yılına kadar İngiltere, Danimarka ve Litvanya olmak üzere üç farklı yerde ofise sahip olup, aralarında Bigpoint, Cartoon Network, Coca-Cola, Disney, Electronic Arts, LEGO, Microsoft, NASA, Ubisoft, Warner Bros gibi şirketlerin de bulunduğu, 250.000'in üstünde kayıtlı kullanıcı sayısına ulaştı. Bu on sene içerisinde aşağıdaki ödüllere layık görüldü:

  • Apple’ın düzenlediği Dünya Çapında Geliştiriciler Konferansı’nda "En İyi Mac OS X Graphics Kullanıcısı" ödülü (2006)
  • Game Developer tarafından verilen “En İyiler” ödülünde finalistlik (2008)
  • Gamasatura tarafından verilen “Yılın En İyi İlk 5 Oyun Şirketinden Biri” ödülü(2009)
  • Develop Magazine tarafından verilen “En İyi Motor”(2010)
  • Mobile Entertainment tarafından verilen “En İyi Oyun Servisi Sağlayıcısı” ödülü (2010)
  • Develop Magazine tarafından verilen “Grand Prix Ödülü” ve “Teknik Yaratıcılık Ödülü” (2010)
  • Wall Street Journal Technology tarafından verilen“Yenilikçi Fikir” ödülü (2010)

Neler Yapılabilir

Unity ile web, Windows ve Mac ortamlarında oyun geliştirilebiliyor. Yaratılan oyunlar iPhone/iPod Touch/iPad, Mac, PC, Web, Wii, Xbox 360, Android ortamlarını destekliyor. Yakın zamanda PS3 desteği de Unity 3.1 ile gelmiş bulunuyor.

Unity özellikle fonksiyonel ve etkileşimli özellikleri sayesinde kullanıcıya kolay ve güçlü bir oyun geliştirme ortamı sunar. Üç boyutlu dünyanızda objeler yaratmak, seviyeler(level) oluşturmak ve düzenlemek; anında test etmek ve aynı kaynakla mobil, web, PC/Mac ve konsollar gibi hedef platform seçebilmek açısından Unity oldukça basit bir ortam sunuyor. Ayrıca taze yenilenen renderlama tekniğiyle oyundaki sahnelerin en güzel şekilde görünmesi ve aynı zamanda performansının da %50 arttırılması; lightmapping (motorda yüzeylerdeki ışıklandırmayı sağlayan veri yapısı) özelliğinin daha da iyileştirilmesi, tüm araçlarda hızlı çalışabilmesi, ortamdaki sesleri belirli filtrelerden geçirerek oyununuzun işitsel ortamını daha da etkili hale getirecek özellikleri açısından da oldukça güçlü bir motor olduğunu söyleyebiliriz. Temel özelliklerini de aşağıdaki başlıklar altında toplayabiliriz:

Motor

Unity motoruyla çalışıyorsanız, kalite veya performans açısından bir sorununuzun olmaması gerekir. :) Unity motorunu temel olarak rendering, ışıklandırma, arazi oluşturma, fizik, ses, programlama ve ağ olarak alt başlıklara ayırmamız mümkün.

Rendering

Rendering sırasında yüzden fazla shader seçeneğiyle istediğiniz gölge miktarını elde edebilirsiniz. Ayrıca Unity, yazılmış bir Cg(C for Graphic) programını çapraz derleyerek mobil araçlar için bir GLSL'ye çevirir. Batching (sahnedeki geometrik şekilleri gruplandırarak sürücüye yüklenen çizme fonksiyonun çağırılma görevinin azaltılması) ve Occlusion Culling (sahnede sadece görüş alanındaki objelerin render edilmesi, yani oluşturulması) tekniklerini kullanarak performansta shadering sebebiyle meydana gelebilecek düşüşleri engeller.

Işıklandırma

Detaylı lightmapping özellikleriyle güneş ışığı, lens efektleri etkilerini kolayca uygulayabilirsiniz. Sahnenize ışığı ayrı bir obje olarak koyabilir, ayrıca kameranıza bağlayarak oyun ekranını görmenizi sağlayan kamerayı bir ışık kaynağı olarak kullanabilirsiniz. Sahnenizdeki objelere ve yüksekliklere bağlı olarak Unity gölge ve yansıma sonuçlarını oldukça etkili ve performanslı bir şekilde görmenizi sağlar.

Arazi Oluşturma

İstenilen yükseklik ve doku özelliklerine sahip araziler, Unity’nin hazır olan “terrain” editörü ile kolayca yaratılabiliyor. Yüzeyin haricinde, bir arazide olması gereken bitki örtüsü veya bütünlüğü sağlayıcı objeler de yine Unity editöründe var olan bileşenler ve çeşitliği arttrabilen eklentilerle oyun ortamını daha da gerçekçi hale getiriyor.

Fizik

Unity fizik motoru olarak NVIDIA Physx kullanmakta olup, onun içerdiği fiziksel bileşenleri de bünyesinde barındırıyor. Yani Rigidbody, Joint, Softbody, Cloth, Wheel gibi parçalar yarattığınız objelerin bileşenlerini oluşturuyor.

Ses

Unity ses dosyalarını yaratmak veya üzerinde oynamak için FMOD adı verilen bir programlama kütüphanesini kullanmakta. Basitçe kullanılan bir düzenleme aracı yoluyla çeşitli filtreleme seçenekleri yardımıyla sahneye ekleyeceğiniz seslere istediğiniz şekilde müdahale edebilmenizi sağlayan Unity, bu bakımdan bir ses motoru olarak bile karşımıza çıkabiliyor.

Programlama

Programlama dili olarak Unity, oyun geliştiricilere üç seçenek sunuyor: JavaScript, C# ve Boo adı verilen Python türevi bir dil. Bu dillerin hızı Unity’de yaklaşık olarak eşit ve aynı proje içerisinde bunların kombinasyonları kullanılabilir; yani aynı objeye farklı dille yazılmış kodlar bağlanılabiliyor. Ayrıca bu üç dil de veritabanı, düzenli ifadeler, XML ve ağ uygulamalarını sağlayan .NET kütüphanelerini kullanabiliyor.

Eğer yaptığınız oyunu ağ üzerinden çoklu bir şekilde, anlık etkileşim içerisinde ve yüksek skorları da içinde barındırarak oynamak istiyorsanız, oyununuz için gereken ağ altyapısını Unity kolayca hallediyor. Kodunuzda yapacağınız ufak değişikliklerle oyun objelerinin konum, hız vb. bilgilerini kullanarak, delta sıkıştırma algoritması yardımıyla, oyuncular arasında durum senkronizasyonu yapılabiliyor. Ayrıca sıralama ve ağ protokollerine takılmaksızın, ağa bağlanan istemcilerden istenilen fonksiyon çağırılabiliyor. Web sayfalarına ve web servislerine Unity’nin WWW adı verilen bir sınıf veri yapısını kullanarak erişilebiliyor; URL adreslerinin içerisindeki bilgiler çekilebiliyor. Bu şekilde hem ağa bağlanılabiliyor hem de ağdaki tarayıcı-oyun entegrasyonu sağlanabiliyor.

Editör

Unity editör açısından oldukça kullanışlı ve basit. Arayüzüyle etkileşim size hiç zor gelmiyor. Editörde temel olarak beş farklı panel var. Araç çubuğu (Toolbar),Sahne (Scene),Projeler(Project),Hiyerarşi (Hierarchy) ve Denetleyici (Inspector). Aslında Unity içerisinde oyununuzu hazırlarken kullandığınız tüm bileşenler; 3D model, animasyon, doku(texture), kod(script) veya ses dosyaları vb., asset olarak isimlendiriliyor.

Unity editöründe sahnenize ekleyebileceğiniz dosya formatlarını aşağıdaki tabloda görebilirsiniz.

Yayınlama

Daha önceden de bahsettiğim gibi, oyun projenizi çoklu platform için çalıştırılabilir hale getirebiliyorsunuz. Projenizi web oynatıcıda, PC ve Mac, iPhone ve iPad, Nintendo Wii, Android, XBOX 360 ve PS3 üzerinde çalıştırabiliyorsunuz. Sadece projenizin yürütülebilir .exe uzantılı dosyasını yaratmadan önce, bu seçeneklerden istediklerinizi seçmeniz yeterli.

Yazımda Unity hakkında genel olarak bilgi vermeye çalıştım. Şu anda araba yarışı temalı arcade bir oyun üzerinde çalıştığım için özellikle arazi ve yol yaratma şekillerini özel olarak inceledim ve Unity’de kullanmak üzere çok ilgi çekici yöntemler olduğunu keşfettim. Bir dahaki yazımda benim gibi kimi geliştiriciler için önem kazanan arazi tasarımı hakkında Unity tarafından geliştirilen alternatiflere bir göz atacağız. Unity için özel olarak tasarlanmış, bir yol dizayn etme aracı olan EasyRoads3D hakkında da bilgi vereceğim. Siz de bu sırada oldukça güzel hazırlanmış olan web sitelerinden detaylı bilgi, kaynak, video ve örnek oyunlara göz atabilirsiniz. Hatta şuradan buyurun ve oynamaya başlayın.

Eğer web, mobil veya konsol için oyun geliştiriyorsanız Unity bu iş için en iyi araç diyip bir dahaki yazımda görüşmek üzere sizleri ve kendimi uğurluyorum.

Kaynaklar