Ana sayfa Yazılım iPhone için ördekli oyuncak projesi

iPhone için ördekli oyuncak projesi

0
Sulu Oyuncak Projesi, Oyun mu? Oyuncak mı?

Projemize oyuncak ismini taktık ama… Neden oyun değil? Bir yazılım ne zaman oyun ne zaman oyuncak olur ve bu farkı doğuran nedir? Yazılım dünyasında değil de, mesela evdeki halının üstünde ya da sokakta, oyun belli kuralları olan eğitici ya da hoş vakit geçirtici bir aktivitedir. Oyuncak ise bu aktivitenin bir aracıdır. Tek-kale-maç, modifiye kuralları olan futbol yavrusu oyundur, topsa oyuncaktır. Pelüş ayılar, barbie bebekler oyuncaktır. Monopol, Kızma birader, parçalı bulmacalar, Rübik küpler amacı ve sonu olan oyunlardır.
 

emrecan çubukçu
 
Uzaktan kumandalı araba bir oyuncaktır. Ama bir yarış yolu ve pist belirlenip, zamana karşı ya da diğer bir uzaktan kumandalı araba ile bitiş çizgisine kimin önce geleceğine dair bir amaçkonursa, bir oyun yaratılabilir. Bu oyuncakla başka bir oyun tasarlayalım. Kitaplardan yapılmış bir rampa ile, arabayı en uzağa atlatmak bir amaç olabilir. Başarılı bir atlayış sayılabilmesi için, belirlenmiş bir yerden start aldıktan arabanın düştüğünde ters dönmemiş olması ve içine oturtulmuş G.I. Joe”nun düşmemiş olmasını kural olarak koyabiliriz. Böylelikle, amacı belirleyip, kuralları koyunca bir oyuncaktan, çeşit çeşit oyun elde edebiliyoruz.

Yazılım dünyasında bu ayrım biraz farklı olmakla beraber aslında aynı öze işaret eder. Bilgisayar Oyun tasarımcısı Chris Crawford, eğer bir oyun aktivitesinin nihai bir amacı yoksa bu bir oyuncaktır demiştir. örneğin Sims ve Simcity”de minör amaçlarımız olmasına rağmen sonunda nihai bir amacımız yoktur. Oynarız, bitmez ve sıkılınca bırakırız. Zaten bu ve başka sebeplerden Farmville de aynı şekildedir ve hiç oynanmaması gerekmektedir.

 

Bir yazılım, fonksiyonlarından hiç beklenmeyen bir şekilde, usta ellerde oyun ya da oyuncak olabilir. Hatta bir oyuna dönüşebilir. iPhone için geliştirilmiş su terazisi uygulamasını düşünelim. App-Store”dan bedavaya indirebildiğiniz ve bir sürü benzeri olan bu yazılım, telefonun üstüne konduğu yüzeyin eğimini, gerçek bir su terazisi kadar hassas, derece cinsinden verebilmektedir. Bu tabi ki bir oyuncak değildir, gerçekten marangozluk tamir işlerinizde, ya da astığınız tablonun düzgünlüğünü sınayabileceğiz bir araçtır. Fakat yeni iPhone almış birinin elinde kolaylıkla bir oyuncağa dönüşebilir. Arkadaşlarını toplayıp neşeyle şovu yapar, masasının üstüne koyup masasının 0.7 derece eğimli olduğunu alette gösterir. Arkasına yaslanıp, arkadaşlarından telefonunu, dolayı ile kendisinin takdir edilmesini bekler. Artık bu dijital su terazisi bir oyuncaktır. Aynı, fener, mesafe-ölçer, metal-detektörü ya da pusula gibi ciddi uygulamaların olduğu gibi… Peki, bu su terazisi oyuncağından nasıl bir oyun elde edilebilir? Oyunu sonlandıracak bir amaç ve kural bularak tabii ki. Amaç yüzeyin eğimini, gerçeğe en yakın tahmin etmek, kural da 10 saniye içinde tahminini söylemek olsun. En kısa sürede, yüzeyin eğimini en yakın tahmin eden kazansın. Evet, yılbaşında, kalabalık bir grupla, kahkahalar esliğinde ve saatlerce oynanacak bir oyun olmadı belki.. Ama gerçek bir marangozluk aracını oyuncağa ve sonra da oyuna dönüştürmeyi başardık.
 
interakt
Şekil 1
 
Simdi sulu oyuncağımızı da oyuncak olarak tasarlayalım. İyi bir oyuncak olursa, oyuna çevirebiliriz. Zaten keyifli bir oyuncak olursa, oyunun da keyif vermesi ihtimali de yüksek olacaktır.

Sahnenin Kurulumu

Projemizi tekrar hatırlayalım. Klasik bir su pompalı oyuncak yapıyoruz. (Şekil 1) Suyun dolu olduğu, Su pompası düğmesinin olduğu oyuncağımızın plastik kasası var. Suyun akışı ile hareket ettirdiğimiz ördekçiklerimiz ve bunları içine sokmaya çalıştığımız denizaltımız var.

ördeğimiz, geçen sayıdan beri, yani yaklaşık iki aydır Unity”nin sonsuz boşluğunda bekliyor. Artık başını sokacak, barınacağı ve sınırlarını bileceği bir yer istiyor, belki de sadece bir “plastik kasa”, bütün ihtiyacı? ördeğimiz artık çevresiyle etkileşmek istiyor, hareket etmek, döndürülmek, sürtünmek ve durdurulmak istiyor. Ona istediğini verecek şey var elimizde, “fizik”! Daha önemlisi elindeki bu imkanları kullanıp hayatını düzene sokmak için bir amaç gerekiyor. İşte bu amaç, “denizalti!”.

 

önce kasadan başlayalım. Plastik görünümlü denizaltının sığabileceği ve üzerine pompalama düğmesini yerleştirebileceğimiz basit bir şey modelledim. Sonra, hafif reflektif plastik bir malzeme atayarak, render edip o dokuyu objeye bake ettim (fırında pişirdim!).
(Şekil 2)
 
3d
Şekil 2
 
Aynı şekilde denizaltıyı da modelledim. Ellerimle ayaklarımla tempo tutarken “la la lala yellow submarine!” diye mırıldandığım için anca bu kalitede modelleyebildim. (Şekil 3)
 
3d yazılım
Şekil 3

 

Bunları alıp proje klasörümüzde assetlerin altına ya da “Projects” yazan alana sürükleyip-bıraktım. Sonra buradan alıp “hierarchy” bölümüne ya da doğrudan “scene””e koyar koymaz, ördeğin yalnızlığına son verdiler. Rotate, Move ve Scale ederek şekil 4″tekine benzer bir yerleşim yaptım.

ördek Fiziği
ördek objemize, su hareket etmiyorken, etkiyen kuvvet sadece yerçekimi olacaktır. ördeğin fiziken kabul gören bir obje olması için ördeğimiz seçili iken “component/Physics/Capsule Collider” ve aynı menü altından RigidBody ekliyoruz.

ördeğimizin ağırlığını ve yerçekimi davranışını oyunumuza uygun seçmeliyiz. Sonuçta bizim ördeklerimiz, suyun içinde hareket eden minik plastik parçacıklar… Ve ne Monet”nin ördekleri kadar havadan hafif, uçucu bir empresyonizme sahipler, ne de Picasso”nun bronz ördek heykeli gibi ağırlar (sanatsal referansların gereksiz kullanımı 101). Ya da bunu daha iyi tarif etmek için sayısal veriler kullanacak olursak, rigidBody”mizin agirligini 1 yapabiliriz.
 


Şekil 4
 
Plastik kasa ve denizaltımıza amorf şekilleri yüzünden Şimdilik “Mesh Collider” ekliyoruz.
Hayatımızın kaynağı su, düğmeye bastıkça, hayali pompamız tarafından, aşağıdaki deliklerden pompalanıyor. Bu da ördeklerin akıntıya kapılıp yukarı doğru savrulmasına neden oluyor. öngördüğümüz akışkanlar mekaniği modelimiz şu anda fazlasıyla basit, ve yukari doğru bir kuvvetten oluşuyor ve ördekler için eğlendirici görünüyor. 2D akışkanlar dinamiği modellerinin gerçek zamanlı çalışabilen optimize algoritmaları, şu anda bir sürü ekran koruyucuda ya da oyunda kullanılıyor. Fakat şu anda planladığımız oyuncakta su fiziğinin, hassasiyetle simule edilmesine (benzeşimine!) gerek duymuyoruz. Ayrıca scriptle yazacağımız bu algoritmaların mobil bir sistemde ne kadar performanslı çalışabileceğini öngöremiyoruz. Oyunun oynanışında da öyle bir ihtiyacımız yok. Kısacası pek uğraşmak da istemiyoruz. Düğmeye basınca ördek hoplasın istiyoruz, o kadar… Ama gerçekçilik cilası açısından, köşelerde olacak akımın yön değiştirmesi etkisini, oralara farklı kuvvet alanları koyarak tanımlayabiliriz. Denizaltı formunun yaratacağı türbülansları da hiiç düşünmeden ihmal edebiliriz.

 

Yine bir takım cilalama açısından ortalığa baloncuklar koymak istiyorum. Bunlarla bir sonraki bölümde uğraşacağız ama şimdiden biraz fiziğine göz atalım. Baloncuklarımız suda yükseldikçe, suyun basıncı azalacağı için büyümeli. “Boyle Kanunu” ne derdi? Sabit sıcaklıkta hacimle basınç ters orantılıdır. Yani basınç artınca hacim küçülür. Basınç düşünce hacim artar. Kapağını kapattığımız pet şişeyi suda derine daldırırsak büzüşür, daha derine daldırırsak biz de büzüşürüz. Aynı prensipte dalgıçlara teorik derslerde şu öğretilir. Scuba ile dalış yapmışken, derinden, deniz yüzeyine çıkarken nefesinizi tutmayınız. Tutarsanız ciğeriniz üzerinde bu yasa kapsamında cezai işlem uygulanacaktır. Scuba tertibatı ile dalan kişi, acele ile yukarı çıkarken ciğerim büyüyor muydu küçülüyor muydu, nefes tutuyor muydum bırakıyor muydum diye düşünmek yerine, “fiziği sıkıcı bulmanın cezasını ciğerler öder” diye bağırmalı ve genleşen fazla havanın ağzından çıkmasına izin vermelidir. Sonuçta, böyleyken böyle, ve Boyle yasasına göre kabarcıklar yukarı çıkarken büyümelidir. Zaten Boyle da böyle isterdi. O zaman haberlere geçip, bitirelim bu sayıyı…
 

 
Unity Haberleri

Unity 3.2 versiyonu çıktı. Unity 3.0″dan beri gerçekleşmiş olan değişikliklere kısaca göz atalım.
• Unity Asset-Store: Bu sistemle bütün Unity kullanıcılarını ortak kullanabileceği bir hazır obje kütüphanesi açıldı. Unity editörün içinden bağlanıyorsunuz, ihtiyacınız olan, 3d obje, doku, script, editör eklentileri, görsel efektler, hatta komple oyun projesi şablonları önünüze geliyor. Sürükle-bırak kolaylığında, indirebiliyor ve projenize dâhil edebiliyorsunuz.

 

• Yeni Post-process efektleri geldi.

• Su shader”ı daha güzelleşmiş. Artık otomatik olarak sahillerde, su kenarındaki suyun üzerindeki köpüklü dokuyu oluşturabiliyoruz. özellikle göl, deniz ve dere gibi doğal suları canlandırırken, suyun toprakla ya da kayayla buluştuğu noktalardaki kenar çizgileri, gerçeklik algısını güçlendiren bir detaydır. Suyun yüzeyinin kara ile kesiştiği noktada hem kara dokusunda ıslanmayı belli eden bir doku değişimi, hem de suyun yüzeyindeki çözülmüş organik bileşiklerin oluşturduğu köpüklenmeyi görmek isteriz. Bunu yapmak için gerekli yöntemlere gerek kalmamış ve çok güzel bir araç olarak yerini almış.

• Mobile ortamlar için yeni shader”lar eklenmiş. özellikle iphone için “bump map” desteğinin gelmesi ve 3.2 versiyonu ile 5 kat hızlanması çok iyi olmuş.

• Uygulamamızın performansını detaylı olarak test etmemize izin veren “Profiler” şimdi standalone uygulamalarımızda da çalışabiliyor. IOS”da çalışırken wi-fi ile programımızın performansını inceleyebilmemiz iyi düşünülmüş bir özellik olarak yerini almış.

• Standart Paketlerden istediklerimizin uygulamamıza dahil edilmesi, bu işlemin bir alt-menüye eklenmesi ile kolaylaştırılmış.

• Cinema4D v12, Modo501, blender 2.551 gibi yazılımların son sürümlerinden doğrudan dosya alımı desteklenmiş. Kocaman yazmışlar bunu, ben de yazmış bulundum buraya ama aslında bu çok gelişme sayılmaz, her versiyonla yapılması gereken bir şey.

• OpenGL API”si normal olarak çeşitli sis türlerine izin vermesine rağmen Unity”de seçim şansımız yoktu. Şimdi linear, exp, exp2 gibi farklı sis formülasyonları arasında seçim yapabiliyoruz.

• JavaScriptin çok boyutlu diziler ve do-while yapıları gelmiş. Javascript artık tam bir dil oldu.

• Forward Rendering”de (bildigimiz normal Rendering) de, “Deferred Rendering” gelince nokta ve spot ışıklarda gölge desteği gitmişti. Geri gelmiş. Eşeğimizi kaybedip geri bulduk, ama sahiden sevindim, sonuçta lazım oluyordu.

 

BİR CEVAP BIRAK

Please enter your comment!
Please enter your name here