Tekrar merhabalar,

Birkaç gün önce 2 yeni oyunumu daha Google Play‘e koydum ve bu oyunları sizlerle paylaşmak istedim. Eğer oyunlar ilginizi çekerse onlara birer şans vererek destek olmanız çok makbule geçer 🙂

İlk oyunum Mini Football. Bir önceki Unity NavMesh dersimde yapımını anlattığım basit futbol oyununun biraz daha geliştirilmiş ve Android’e uyarlanmış hali. Oyundaki amacımız topu rakipten önce 60 saniye boyunca ayağımızda tutmak ve bu esnada sahadaki engellere karşı da dikkatli olmak. Bu oyunda ilk defa Unity Ads kullandım, nasıl sonuç vereceğini bekleyip göreceğiz.

Link: https://play.google.com/store/apps/details?id=com.yasirkula.MiniFootball

Mini Football 1

İkinci oyunum ise Whack ’em Augmented Reality. İsminden anlaşılacağı üzere artırılmış gerçeklik (augmented reality) üzerine yaptığım bir çalışma. Oyunu Qualcomm Vuforia‘nın Unity pluginini kullanarak geliştirdim ve bu AR teknolojisinden fazlasıyla da memnun kaldım; bence bu alanda büyük bir potansiyel var. Oyundaki amacımız, karşımıza gelen kuru kafalara nişan alıp ateş ederek elimizden geldiğince onları geri püskürtmek.

Link: https://play.google.com/store/apps/details?id=com.yasirkula.whackem

Whack 'em

Yorumlar
  1. yakup diyor ki:

    Hocam 2. oyunda potansiyel var var olmasına ama indirip oynadım çok fazla enerji tüketiyor ve telefonun ısınmasına sebep oluyor.Performans sorunları dışında gayet başarılı.

  2. İbrahim Yılmaz diyor ki:

    http://i.hizliresim.com/YroaE6.png

    Abi ilgilenirsen sevinirim sorunu çözemedim bir türlü;
    abi Vuforia olayını yapmaya çalıştım da bi türlü beceremedim. Kamera açılmıyor arka plan siyah kalıyor,2 sorun var. Console ekranın da yazan var bir de Inspector kısmında “Web Cam behaviour” altında kırmızı ve sarı ünlem var. olmayan ingilizcemle araştırdım ama çözemedim.

    Console da ki hata;

    Failed to load ‘Assets/Plugins/QCARWrapper.dll’, expected 64 bit architecture (IMAGE_FILE_MACHINE_AMD64), but was IMAGE_FILE_MACHINE_I386. You must recompile your plugin for 64 bit architecture.
    Vuforia.WebCamAbstractBehaviour:CheckNativePluginSupport()
    Vuforia.WebCamAbstractBehaviour:CheckNativePluginSupport()
    Vuforia.EditorClasses.WebCamEditor:OnInspectorGUI()
    UnityEditor.DockArea:OnGUI()

    • yasirkula diyor ki:

      Bilgisayarın webcam’i ile ben de aynı hatayı alıyorum, o yüzden bilgisayarda test edemiyorum. Ancak telefonda sıkıntısız çalışıyor.

  3. cenker diyor ki:

    şunu farkettim partikül efektlerimi nasıl pool ediceğimi bilmiyorum androidte partikül efektleri şak diye çıkartmak ve destroy etmek acayip yoruyor fakat benimde bir tane efektim yok 3 4 taneçeşit ama hepsinde aynı componenetler var bir ses birde partikül sistem(şuriken)

    boş objeleri pool etsem sonradan add component yapsam çok kasar diye düşündüm ben başka bir yerde 2dpoligon collideri sonradan ekliyordum oyuna cpu çok kullanıyordu belki model olduğu için kasıyordur belkide tüm componentleri sonradan eklemek yoruyordur

    bu farklı efektleri nasıl androidte kullanıcam çözemedim aynı poolda durduramıyorum hepsi için ayrı ayrı script oluşturmakta çok saçma geliyor

    • cenker diyor ki:

      hazır yazmışken başka soruda sormak istedim siz android te plugin vasıtası ile mi google play high score yaptınız

      • cenker diyor ki:

        spam yaptım özürdilerim sorumun cevabını buldum sanırım partikül efekti şöyle bi karıştırdım ki simulation space world yapınca partikül efektin yeri değiştiği halde eski partiküller yer değiştirmiyor sorunum aslında tam olarak buydu pool felan istemiyordum sadece sanki birden fazla partikül varmış hissivermekti şimdi ise sadece partiküllün yerini değiştiricem ama ikinci sorumu yanıtlarsanız sevinirim xml ile kendiniz mi yazdınız yoksa asset storeden in app purschase gibi şeyler mi satın aldınız

    • yasirkula diyor ki:

      EDIT: Pool sorununuzu zaten çözmüşsünüz ama bu cevap yine de burada kalsın.

      GGJ16’da basit bir generic pool script yazmıştım. O belki işinize yarar: https://github.com/yasirkula/UnityGenericPool/blob/master/PoolScript.cs

      Örneğin şu şekil bir kullanım yapabilirsiniz:

      public ParticleSystem partikulPrefab1, partikulPrefab2;
      PoolScript<ParticleSystem> particles1, particles2;
      
      void Awake()
      {
      	// 2 partikül efekti için 2 ayrı pool oluştur
      	particles1 = new PoolScript<ParticleSystem>();
      	particles2 = new PoolScript<ParticleSystem>();
      	
      	// Pool'ların her birini 2'şer adet partikül ile donat
      	particles1.Populate( partikulPrefab1, 2 );
      	particles2.Populate( partikulPrefab2, 2 );
      }
      
      public Transform Partikul1Al()
      {
      	return particles1.Pop().transform;
      }
      
      public Transform Partikul2Al()
      {
      	return particles2.Pop().transform;
      }
      
      public void Partikul1GeriKoy( Transform partikul )
      {
      	particles1.Push( partikul.GetComponent<ParticleSystem>() );
      }
      
      public void Partikul2GeriKoy( Transform partikul )
      {
      	particles2.Push( partikul.GetComponent<ParticleSystem>() );
      }
      
  4. Taha koksal diyor ki:

    Yasir hocam unity ads reklamları nasıl konulacağı hakkında bizi bilgilendirirseniz sevinirim.

    • yasirkula diyor ki:

      Açıkçası Unity 5’in son sürümleri ile çok kolaylaştırmışlar: önce Window-Services’taki Ads’i aktifleştirip orada istenen birkaç basit bilgiyi dolduruyoruz. Ardından şu kod ile reklam gösterebiliyoruz:

      if( Advertisement.IsReady() )
      Advertisement.Show();
      
      • kaco1322 diyor ki:

        Hocam çok saolun reklamı ekledim (videolu) olan ama kazançlar neye göre hesaplanıyor tıklamayamı ,izlemeyemi anlamadım?

      • yasirkula diyor ki:

        Şu an için ben de bilmiyorum. Unity Ads’ten para kazanmaya başlarsam öğreneceğim hayırlısıyla 🙂

  5. vedat diyor ki:

    Selam hocam https://app.box.com/s/9354cf7fdbda92f573b6 bu dosyaları indiremiyorum yeni bir link verebilirmisin. app.box problem çıkarıyor indirmelerde şimdiden sağol

  6. Hasan Aktaş diyor ki:

    Yasir Hocam Google Play’de Uygulama İçi Satımla İlgili bir Ders Yapma Şansınız Var mı? Hiç Türkçe Kaynak Yok Çünkü. Misal Uygulamızda Reklam Var. Reklamları Satın Almayla Kapatmasını Nasıl Sağlayabiliriz?

  7. cenker diyor ki:

    kendim kodladım anlamadıysanız yine yazarım

    direkt olarak posisyona transform.position ile ulaşmak ile gamObject.transform.position farkı nedir

    if (Vector3.Distance (transform.position, currentStep.position) > 0.1f) {
    transform.position = Vector3.MoveTowards (transform.position, currentStep.position, speed);

    iki nokta arasında gidip gelmesi için basit bir kod yazdım ama NullReferenceException: Object reference not set to an instance of an object veriyor

    currentstep(yani gidilicek nokta) step1(ilk yani doğulan pozisyon) veya step2(gidilicek pozisyon) olabiliyor

    başka bir fonksiyon yaptım change diye gidilicek noktaya varılınca step2 den step1e atıyor currentstepi

    skype’den anlatabilirim

    https://www.dropbox.com/sh/jztuhgtv1zw22zl/AAB0AgwJezGmb6yov1OBeL4La?dl=0

    • cenker diyor ki:

      sonsuz koşu yaptım bölümler ve pointlerden oluşuyor bölümleri rasgele birinini aktif edip kapatıyorum sonra ilerletiyorum tekrar herhangi birini açıp kapıyorum bölümler sadece pointleri yani transformları tutuyor o pointlerde enabled olunca bir kereliğine çalışıp ne pointi ise onu create ediyor sonsuz koşu mantığını duymuştum kendi sistemimi yaptım

  8. cenker diyor ki:

    birdler kıpırdıyorlar 2 nokta arasında step1 step2 hangisine gideceğini ise başka bir nokta yaptım(transform) currentstep diye currentstepi step1 veya step2 yapıyorum change fonksiyonu ile
    birdde ona göre hareket etmesi gerek ama transform gameobject olayını tam kavrayamadım hata veriyor

    • cenker diyor ki:

      getnumbers ile transformları alıyor birdpoint bird’e aktarıyor transformların yerlerini zaten step1 birdpointin componentinin eklendiği gameobjectin transformu step2 ise aynı gameobjectin boş bir childi

      • cenker diyor ki:

        çıldırdım tek istediğim konumlarını almaktı bende gittim transformları almak yerine vector3 aldım şuanda yapmak istediğim şey oluyor . transform unity3d temporary cache alakalı birşeydi hatırladığım kadarıyla geçeci tutuyor benim kodtada transform yollanıyor parametre olarak ama bir daha çalışmadan o parametrenin gönderilmesi mümkün değil . kafam yandı olayı çözdüm ama nasıl yaptığımı bende bilmiyorum konumları istiyordum transform yerine vector3leri referans aldım transform alınca sectionlar aktif edilince eski kuşlar oluşturulan yeni sectiona doğru gidiyordu . section poiintleri tutan bir gameobject boş.

        sonuç olarak konum lazımsa direk vector3 yani transform.position yollucaz veya onun vector3 halini vector3 konum transform.position yazıp konumu yollucaz parametre olarak eğer bunu yapmayıp transformu yollarsak pcnin temporarry sindeki şeyi yolluyoruz sanırım oda ne oluyosa işte

        anlamadım ama yaptım

      • yasirkula diyor ki:

        Ben sıkıntıyı tam olarak anlayamadım hâlâ ama sorunu çözmüşsünüz zaten, önemli olan o 🙂

  9. cenker diyor ki:

    peki static veya dynamic batching yapmayı biliyormusunuz spriterenderer ve gui için özellikle çünkü batches ve setpasscall numaraları artıyor her obje için playdeyken ctrl + d yapın artışı görürsünüz spritepackeri kullandım atlas yaptım felan fakat değişim olmadı

    • yasirkula diyor ki:

      Static batching, vertex sayısı düşük objelerin static kutucuğunu işaretleyerek oluyor ancak ben hiç yapmadım. Dynamic batching ise aynı materyali paylaşan objeler arasında gerçek zamanlı olarak gerçekleşiyor. Dynamic batching’i kısıtlayan faktörler şurada yazıyor: http://docs.unity3d.com/Manual/DrawCallBatching.html

      Unity 5 ile benim UI’daki draw call sayım düştü; yani UI Unity 4’e göre daha bir optimize edilmiş durumda. Sprite Packer için sprite’larınızın Packing Tag’lerinin aynı olduğunu varsayıyorum. Sprite’ın çözünürlüğü çok yüksekse belki bu dynamic batching’i engelliyordur.

  10. Burak diyor ki:

    Hocam benim bi projem var açıkçası programlama dili bilmem projeme gelirsek videolar ile bir bulmaca mi dersiniz macera mi versiniz ondan yapacam android üzerine videolar tamamen gerçek olacak Aslinda fazla bise yok ama ben böyle bir projenin örneğini tanitan görmedim unity var game maker var hangisi ya da hangileri ile nasil yapabilirim

    • yasirkula diyor ki:

      Projede 3 boyutlu dijital bir içerik olmayacağını varsayarsak Game Maker daha uygun olabilir. Nasıl yapılır kısmında yardımcı olamayacağım.

  11. İmfa diyor ki:

    Yasir kardeşim unity C# dersleri vermeyi düşünüyor musun? İnternette turkce kaynak yok malesef 😦 mantığını bilmediğimiz şeyi öğrenmiş olamayız, eğer boyle bir projen olursa inşallah +yakın takipteyim

    • yasirkula diyor ki:

      Unityscript ile C# gerçekten de birbiriyle neredeyse aynı. Bence şu dersimi okuyup birkaç script üzerinde kendi başınıza alıştırma yapın: https://yasirkula.com/2013/08/21/unityde-javascript-unityscript-ile-cin-birbirinden-farklari/

      • İmfa diyor ki:

        Hocam yazılarınızı zaten okumaya çalışıyorum heves ve istekle. Okumuştum bunu da 🙂 Hic başlamamış değilim şuanda bitmek üzere olan 2D bir oyunum var elhamdülillah . Ben kendimi daha da geliştirmek istiyorum. Yazdığım kodların mantılarını öğrenmek istiyorum. Bildiğim birkaç kod var onlarla yapıyorum sürekli geri kalanları da deneme yanılma ile yapıyorum ama aşırı vakit kaybı ve mantığı anlamama gibi sorunlar çıkıyor. Eğer vaktin olursa Unity C# dersleri yapmanızı çok isterim

      • yasirkula diyor ki:

        Yakın zamanda olacağını düşünmüyorum ama görelim mevlam neyler 🙂

  12. Ali Tarık Mırık diyor ki:

    ikinci oyun ilgimi çekti ve biraz araştırma yaptım herşey güzel çalışıyor. fakat baştaki yüzey seçme yerini nasıl yaptınız ?

  13. bce diyor ki:

    hocam pooling sistemini açıklayan bir ders yazarsanız memnun olurum

    • yasirkula diyor ki:

      Instantiate ve Destroy komutları, fazlaca kullanıldıkları vakit oyunu takıldırabilen komutlar. Eğer bir objeden sürekli Instantiate ve Destroy ediyorsanız (örneğin bir kurşun objesi) haliyle oyunun performansı düşebilir.

      Pooling pattern’de şöyle bir yöntem uygulanıyor: o objeden oyunun başında birkaç adet oluşturuluyor (yine Instantiate ile); ardından ne zaman bir kurşun objesine ihtiyaç duyulsa bu pool’da yer alan “kullanıma hazır” bir kurşun objesi kullanılıyor. Bu kurşun objesi ile işimiz bittiğinde ise kurşun objesini Destroy etmek yerine deaktif edip pool’a geri atıyoruz. Bu sayede kurşunlar için sadece oyunun başında Instantiate kullandığımız ve hiç Destroy kullanmadığımız için oyun daha iyi performans sergiliyor.

      Bazen pool’daki objelerin sayısı anlık ihtiyacı karşılamaya yetmeyebiliyor, bu durumda ise mecburen kurşun objesinden yeni bir tane daha Instantiate ediliyor (oyun esnasında). Bu kurşunla işimiz bitince onu da yine havuza atıyoruz (Destroy etmiyoruz).

      Pooling ile ilgili Unity’nin video dersi: https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling
      Kendi yazdığım generic bir pooling scripti: https://github.com/yasirkula/UnityGenericPool

  14. emrahatalay diyor ki:

    Güzel bir oyun olmuş gerçekten. inşallah en yakın zamanda bende bu alanda çalışmalarıma başlayacağım 🙂

    http://atalayemrah.com

  15. brend diyor ki:

    Merhaba bir sorum olacaktı. korku oyunu yaptım unity 4 free versiyonla ama pc de oynanıyor. bu projeyi android yapmak için pro versiyon mu gerekiyor yoksa free versiyonlada androide çıkara bilirmiyim?

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s