Hepinize merhabalar,

Yeni bir Unity 3D örneğiyle karşınızdayım. İsminden de anlaşılacağı üzere bu bir infinite runner oyunu örneği. Örnekteki tüm kodlar C# dili ile yazıldı ve olabildiğince comment’lendi. Örnek hem PC hem de mobil platformlarda sorunsuz çalışmakta (bende sıkıntı çıkmadı). Kontroller tasarlanırken Temple Run oyunu baz alındı.

Buyurun size örnekten bir resim:

temple run

Linkler ve açıklamalar için yazının devamını okuyabilirsiniz…

Bu örnek aslında Klonluyoruz serisinin ikinci dersi olacaktı ancak sonradan vazgeçtim. İyiki de vazgeçmişim zira oyunun yapımını adım adım anlatmak aylarımı alırdı. Klonluyoruz’un ikinci dersi ne hakkında olacak; işte o henüz belli değil.

Bu örnekle birlikte UI sistemini ilk kez kullanmış oldum. Unity’nin yeni UI sistemi gerçekten de çok ilgi çekici olmuş ve hâlâ denemediyseniz şiddetle tavsiye ederim. Oyunda yer alan menüler ve 3D skor yazısı tamamen UI sistemi ile yapıldı.

Onun haricinde ilk defa bir projemde pool (havuz) pattern kullanmış oldum. Bu pattern’in ne işe yaradığıyla ilgili, scriptlerden birinde yazdığım ufak bir comment’i burada da paylaşmak isterim:

Bu örnekte pooling adı verilen bir teknikten (pattern) faydalanıyoruz. Bu pattern’in hedefi oldukça basit: eğer ki bir objeyi oyun boyunca defalarca kez Instantiate ve Destroy ediyorsak bunun yerine o objeyi Destroy etmiyor ama havuz adı verilen bir yerde depoluyoruz ve o objeye tekrar ihtiyacımız olduğunda objeyi direkt havuzdan çekiyoruz, yani Instantiate ile uğraşmıyoruz.

Bu pattern bir infinite runner oyunu için kritik öneme sahip çünkü bu tür oyunlarda yol prosedürel olarak oluşturuluyor, sonsuza kadar gidiyor ama genel olarak aynı obje oyun boyunca defalarca kez kullanılıyor. Eğer ki yeni yol oluşturma işlemini Instantiate ve Destroy’lar ile yapsaydık tek bir seferde belki onlarca, belki yüzlerce objenin Instantiate ve(ya) Destroy edilmesi gerekecekti ve bu da FPS’te o an ciddi bir düşüşe, belki de bir iki saniyelik ciddi takılmalara sebep olacaktı.

Örnekteki tüm kodları ben yazdım; hepsinden dilediğinizce faydalanabilirsiniz. Kodların haricinde o “harika” low-poly karakter modeli ile “muhteşem” animasyonlar da benim eserim 😀 Sadece tuğla ve çimen texture’leri ile ses dosyaları bana ait değil ve onları ticari oyunlarınızda kullanmanızı tavsiye etmem (copyright yememek için).

Bu örneğin eksik (geliştirmeye açık) yönleri neler diyebilirsiniz. Öncelikle şunu söyleyebilirim ki şu anda rastgele yol oluşturma algoritması “çok” basit. Rastgele seçilen zemin objeleri uç uca diziliyorlar sadece. Arada herhangi bir koşul söz konusu değil. Buna ek olarak karakterin hareket etme kodları da mükemmel sayılmaz. Mesela karakterin yuvarlanması gibi birşey bu örnekte söz konusu değil (ama elbette ki zıplama var).

Ben en iyisi sizi daha da sabırsızlandırmayayım ve örneğin linklerini paylaşayım:

Eğer ki örneği internet üzerinden Unity Web Player ile test etmek isterseniz tıklayın: http://yasirkula.freeiz.com/Projects/YasirRun.html

Eğer ki örnek projeyi indirmek isterseniz de buraya tıklayın: https://www.dropbox.com/s/ckzkzr6a5pn0vgo/TempleRunKlon.rar?dl=0

NOT: PC’de oynarken dönemeçlerden sağa sola dönmek için A ve D tuşlarını kullanabilirsiniz.

Örneğin faydalı olmasını diliyor, sonraki derste görüşmek üzere diyerek yazımı noktalıyorum.

Yorumlar
  1. Halim Toklu diyor ki:

    emeğin için teşekkürler. açılmadı hata verdi örnek dosya bende

    • yasirkula diyor ki:

      İkinci linkteki Winrar arşivinde yer alan klasörü bir yere çıkarmalı ve Unity’de Open Project dedikten sonra o klasöre bir kere tıklayıp Tamam demelisiniz. Eğer projeyi açma aşamasında sıkıntı yoksa nasıl bir hata aldığınızı yazar mısınız?

  2. celil diyor ki:

    cok tesekkurler

  3. çağlar diyor ki:

    bende de hata veriyor. Proje açılıyor ancak oyun adlı screen e çift tıkladığımızda hataya düşüyor.

    • yasirkula diyor ki:

      Örneği Unity’nin 4.6.1f1 sürümüyle oluşturdum, daha alt sürümlerde çalışmayabilir.

      Ben şimdi tekrar test ettim, proje bende sıkıntısız çalışıyor. Siz aldığınız hatanın içeriğini de paylaşırsanız sorun hakkında daha çok bilgi sahibi olabilirim.

  4. çağlar diyor ki:

    Merhaba, sorun raporu şu şekilde görünüyor http://prntscr.com/5ssnwl

    • yasirkula diyor ki:

      1- Winrar arşivinin içeriğini bir klasöre çıkardınız mı? (yani Winrar’ın içinde iken scene dosyasına çift tıklamıyorsunuzdur herhalde)

      2- Unity son sürümü yüklü mü? (en az 4.6.1f1 olmalı)

      3- Open Project vasıtasıyla projeyi açtınız mı?

      4- Projedeki diğer asset’ler Project panelinde gözüküyor mu?

      Bu soruların hepsine cevabınız evet ise sorunun kaynağını ben de çok merak ediyorum.

      • atunga diyor ki:

        Yüksek oranla 4.6 değil dir.Bende de oluyordu şimdi tıkır tıkır çalışıyor 4.6 ile 🙂 Teşekkürler

  5. Fatih KAYA diyor ki:

    abi sana 2 şey soracağım
    1.si ( Unity’nin yeni UI sistemi ) demişsin bildiğimiz UI mı bu yoksa güncelleme ile filan yeni sürümmü geldi ?
    2.si de 2d bir oyun için program varmı bildiğin önerebileceğin? (Photoshop kullansak orjinal değil google playe filan attığımızda sıkıntı çıkartırmı ) şimdiden teşekkürler.

    • Fatih KAYA diyor ki:

      2.soru grafik (resim) programı yazmayı unutmuşum

    • yasirkula diyor ki:

      UI sistemi Unity 4.6 sürümü ile geldi. GameObject menüsünde UI adı altında bir sekme var, işte oradaki UI elemanları yeni sistemin birer ürünleri.

      Grafik programı olarak ise Paint.NET kullanıyorum çünkü benim grafik anlamında yaptığım çalışmalar/düzenlemeler çok basit oluyor. Ama korsan Photoshop ile grafikleri tasarlasanız sıkıntı olur mu olmaz mı o konuda bilgim yok.

  6. ahmetcankisactutan diyor ki:

    Mobil oyunlar için cihazdan cihaza göre ekran kaymasının kesin bir çözümü var mı?

  7. gamex diyor ki:

    Buradaki puan objesini değiştiremedim hangi scriptin içinde bi bilgi versen

    • yasirkula diyor ki:

      Puanın şeklini (3D modelini) değiştirecekseniz kodları ellemenize gerek yok. Kullanmak istediğiniz 3D modeli Unity’e import edin ve ardından o modeli tutup Puan prefab’ının (Project panelindeki Diger klasörü içinde) Inspector’undaki Mesh kısmına değer olarak verin. Ardından Mesh Renderer’ın Materials kısmındaki materyali de yeni 3D modelin materyaliyle değiştirmeniz gerekebilir.

  8. rıdvan diyor ki:

    derslerin devamını bekliyoruz. Saygılarla Rıdvan YeşiL

  9. yunus diyor ki:

    yasir abi cok teşekkür ederim devamını bekliyoruz sayende unity kendimi geliştirdim

  10. ibrahim YILMAZ diyor ki:

    abi oyunda sağa sola nasıl dönülüyor? bulamadım her seferinde çarpıyorum.

    • yasirkula diyor ki:

      😀 😀 Birşeyi yazmayı unuttum diyordum, buymuş. A-D tuşlarıyla dönülüyor. Mobil cihazlarda ise parmağı sağa veya sola sürükleyerek.

  11. Fatih KAYA diyor ki:

    Abi bi sorum daha olacak siteye baktım ama göremedim.Level sistemi nasıl oluşturabiliriz? unity assets de bazı çalışmalar var ama onları importladıktan sonra ne yapmam gerekli?

    • Fatih KAYA diyor ki:

      Yani basit bir level menüsü nasıl oluşturabiliriz

    • yasirkula diyor ki:

      Diyelim kullanıcı 2. levela tıkladı. PlayerPrefs.GetInt(“Level2Unlocked”)’un değerine bakacaksınız, değeri 1 ise 2. levela gidecek, değilse hiçbir şey yapmayacaksınız. Level 1 bitince ise PlayerPrefs.SetInt(“Level2Unlocked”,1); yapacaksınız.

      Daha başka yollar da vardır, onları da siz araştırın.

  12. ahmetcankisactutan diyor ki:

    Merhaba Yasir bey..Bir nesnenin, y rotasyonunda, her sahne açılışında farklı olarak 0,90,180,270 değerlerini random olarak almasını c#’da nasıl sağlarım? random.rotation’a baktım ama değerlerini sınırlandıramadım..

  13. Serhat diyor ki:

    Hata veriyor Oyun.exe ye basınca http://i.imgur.com/dRezE7b.png hata raporunu veriyor.

    1- Winrar arşivinin içeriğini bir klasöre çıkardınız mı? – EVET ÇIKARDIM.

    2- Unity son sürümü yüklü mü? (en az 4.6.1f1 olmalı) – EN SON SÜRÜMÜ

    3- Open Project vasıtasıyla projeyi açtınız mı? – AYNEN ÖYLE., OPEN PROJECT YOLU İLE AÇTIM.

    4- Projedeki diğer asset’ler Project panelinde gözüküyor mu? – EVET HEPSİ GÖZÜKÜYOR.

    Ne yapıcam :/

    • yasirkula diyor ki:

      Projeyi tekrar rar’layıp aynı linke ( https://www.dropbox.com/s/ckzkzr6a5pn0vgo/TempleRunKlon.rar?dl=0 ) koydum. Sonrasında projeyi o linkten indirip kendim test ettim, bende çalıştı.

      • Serhat diyor ki:

        Çok değişik bir sorun. Sizde çalışıyorsa bende neden çalışmıyor? Merak konusu.
        Şöyle düz mantık olarak baksak, Unity sürümümüz aynı, rar içerisindeki dosyalar da aynı. Fakat işletim sistemi farklı olabilir. Pc’im Win/7 32 bit.
        Ben dosyaları D:/ sürücüsüne arıyorum. Yerel disk C:/ dolu olduğundan dolayı. acaba bununla bir alakası var mıdır ?

      • yasirkula diyor ki:

        Ben de D:/’yi kullanıyorum. İşletim sistemim ise 64-bit ama şu ana kadar bu sitede paylaştığım şeyler hep 64-bit üzerinde yapıldı. Ben de anlayamıyorum hatanın sebebini.

  14. Mesut diyor ki:

    Bu oyunu PDF olarak ders haline getirecek misin?

  15. kadir diyor ki:

    Çok başarılı ve öğretici. Emeğinize sağlık.

  16. nurullah diyor ki:

    yasir bey gereken düzeltmeleri yaptıktan sonra [texture sound ve ufak tefek değişimler] kendimiz free bir şekilde play store de adımıza yayınlayabilir miyiz?

  17. ercan diyor ki:

    yasir bey. Ben bir oyunumda .oyunda geçen her saniyeyi puan olarak ekranın köşesinde yazdırmak istiyorum.Hangi komutlarla nasıl yapabilirim. javascript olarak

    • yasirkula diyor ki:

      Geçen saniyeyi hesaplamak için Time.deltaTime veya Time.time değişkeninden faydalanacaksınız. Süreyi ekrana yazdırmak için UI sistemini kullanabilirsiniz.

  18. Mustafa diyor ki:

    Peki Şimdi Bu Oyun Sensörle Çalışıyorya Ben Bunu Nasıl Temple Rundaki Gibi Parmakla Sag sol Yapabilirim ?

  19. Mustafa Bektasoglu diyor ki:

    Zaten Bende Bu Konuya Yorum attım herşey tamam da sensörle çalışıyor ben kosarken yana gitmek için parmak kullanmak istiyorum ?

  20. Veli diyor ki:

    Projeyi indirdim açtım gayet güzel çalışıyor ama o projede oyuna başlamadan önce camera karakterin etrafında dolanıp duruyor onu nasıl yaptığını bir ders yapıp atsan veya yoruma yazsan çok mutlu olurum.

  21. an0n1m38 diyor ki:

    Öncelikle böyle güzel projelerle biz yeni öğrenenlere yardımcı olduğunuz için teşekkürler.Sitenizin üye ol paneline erişim hatası aldığım için mail atmayı tercih ettim.

    Paylaştığınız projede birtakım değişiklikler yapmaya çalıştım ama bir sorunla karşılaştım yardımcı olabilirseniz çok sevinirim.

    Puan objesine farklı elemanlar(10 tane) eklemek ve bunlara + veya – score puan ı vermek istiyorum, puan objesini diziye çevirmek istedim, çoğu hatayı düzelttim ama
    “Assets/Scripts/SonsuzYolScript.cs(349,23): error CS1501: No overload for method `HavuzaPuanObjesiEkle’ takes `1′ arguments” hatasını düzeltemedim.

    Score u puan objelerine göre ayarlamak istiyorum… Onun için farklı puanlar olmalı…

  22. yunus diyor ki:

    abi yolda deliklerin çıkmasını istemiyprum bunu nasıl yapabilirim unityde yeniyim yardim edersen cok sevinirim

  23. yunusemre diyor ki:

    Abi karakter gözüķmüyor ya onu nasıl görünür yaparım karakteri degistirmek istiyorumda

    • yasirkula diyor ki:

      Karakteri değiştirmek için animasyonları da değiştirmek gerekecek ve bu büyük bir gayret sarfetmek gerektirebilecek. Bu konuya dalmak istemiyorum.

      • yunusemre diyor ki:

        Abi karakteri nasıl görünür yaparım onu sordum karakteri değiştirmesem bi
        Eğilme vb. Animasyonlar yapacağım

      • yasirkula diyor ki:

        Karakterin Mesh Renderer’ı kapalı olmadığı müddetçe karakter görünür olur zaten. Main Camera’nın Kamera Kontrol component’indeki Hedef’e değer olarak karakteri vermeyi unutmayın.

  24. yunusemre diyor ki:

    Layer ını default yaptım olduda abi eğilme anmiasyonu yaptımbunu nasıl tablete(telefona) uyumlu bir halde çalıştırırım

    • yasirkula diyor ki:

      Input Manager’da 113. satırda başlayan bir if-else if-else koşulu var. Oraya yeni bir else if eklemeniz gerekebilir. Eğer y 0’dan küçükse karakter eğilecek. Gerekli ayarlamaları siz yapın.

  25. yunusemre diyor ki:

    Abi para objelerini nasıl değiştirebilirim paralar gözükmüyor ya o bakımdan

  26. yunusemre diyor ki:

    Bende unoty5 kulanıyorum fakat arsa cameralar dışında hiç birşey gözükmüyor

    • yasirkula diyor ki:

      Aynı sürümde çalışıyoruz ancak bende düzgün gözüküyor. Sebebini ben de anlamadım 😦 Örnek projeyi tekrar indirmeyi deneyin son çare.

  27. siyanbian diyor ki:

    Emeğiniz için çok sağolun hocam sizin bildiğiniz ücretsiz texture veya obje veren herhangi bir site biliyor musunuz şimdiden Teşekkürler

  28. medethan diyor ki:

    yasir kardeş yan taraflara dağ eklemek istiyorum yardım edermisin

  29. medethan diyor ki:

    ya kardes hadi yaa cok mu uzun

  30. Yunus kara diyor ki:

    İnternets unity tereain dersi yaz orda bolca anlatım bulursun

  31. medethan diyor ki:

    kardeş o skor yazısını nasıl sabitlerim

    • yasirkula diyor ki:

      Canvas’ın “Render Mode”unu “Screen Space” yaparsanız UI ekrana iki boyutlu olarak çizdirilir ama UI’ı görebilmek için önce bir miktar büyütmeniz gerekebilir.

      • medethan diyor ki:

        kardeş canvasın render4 modunu scren space yapıyorum skor ekrandan kayboluyor nasıl göstericirm ve ben sag uste sabıtleme istıyorum

      • yasirkula diyor ki:

        Canvas miniciktir belki, büyültün birşeyler yapın. Denemekten korkmayın…

  32. yardım edermisiniz diyor ki:

    yasir bey ;
    GameObject.FindWithTag(“zemin”).transform.rotation(1,0,14);
    oyunuma bu kodu yazdığımda sıkıntı çıkarıyor.amacım zemin taglı objenin rotation’unu değiştirmek nasıl düzeltebilirim acaba?

    • yardım edermisiniz diyor ki:

      yardım ederseniz sevinirim.ayrıca java diliyle yazıyorum.

    • yasirkula diyor ki:

      GameObject.FindWithTag("zemin").transform.localEulerAngles = new Vector3(1,0,14);

      • yardım edermisiniz diyor ki:

        peki sadece y eksenini değiştirmek isitersem nasıl yapıcam? x ve z değerleri oyun içindeki o anki durumları olsun ama y değeri 10 olsun mesela.

      • yasirkula diyor ki:

        var egim : Vector3 = GameObject.FindWithTag("zemin").transform.localEulerAngles;
        GameObject.FindWithTag("zemin").transform.localEulerAngles = new Vector3(egim.x,10,egim.z);

  33. ahmet diyor ki:

    Hocam ben ekrana bir küp atıp bunun içine kodlama yaparak x,y veya z eksenlerinden birinden nasıl otomatik olarak istediğim sayıda yan yana bu küplerden dizebilirim.Yardımlarınız için teşekürler.

    • ahmet diyor ki:

      void Puanyarat()
      {

      if(_PuanYaratPos-transform.position.x1)
      {
      _PuanSayac=0;
      _SagSol=Mathf.Round(Random.Range(0,0));

      }
      }

      }

      kodunu yazarak yan yana 1.5f aralıkla 15 tane küp diziyorum bundan sonra alt satıra geçip
      4 satır olacak şekilde bir daha nasıl dizebilirim.Teşekürler şimdiden.

    • yasirkula diyor ki:
      for( var i = 0; i < 10; i++ )
      {
      	var kup : GameObject = GameObject.CreatePrimitive( PrimitiveType.Cube );
      	kup.transform.position = new Vector3( i, 0.0, 0.0 );
      }
      
      • yasirkula diyor ki:

        4 satır için:

        for( var j = 0; j < 4; j++ )
        {
        	for( var i = 0; i < 15; i++ )
        	{
        		var kup : GameObject = GameObject.CreatePrimitive( PrimitiveType.Cube );
        		kup.transform.position = new Vector3( i * 1.5, -j * 1.5, 0.0 );
        	}
        }
        
  34. ahmet diyor ki:

    yardımınız için teşekürler

  35. ahmet diyor ki:

    bir sorum daha olacaktı ben sahneye karekteri atıp kamerayı ayarladıktan sonra oyunu çalıştırıyorum ama tam güzel görüntü olmuyor karekter animasyondan dolayı hareket ediyor ama görüntüde bozukluk oluyor.karekterin model çizmedeki kıvrımlarını çizgi çizgi gösteriyor sorun nedir acaba fikriniz varmı.

  36. ahmet diyor ki:

    teşekürler yardımınız için

  37. maliyazici diyor ki:

    Sonsuz yolun duvarlarını texture unu nasıl değişebilirim

  38. ahmet diyor ki:

    Merhabalar bir sorum olacaktı. Hocam oyundaki karekterin üzerine değişik tarzda elbise giydirme olayını nasıl yapabilirim.üzerinde mevcut bulunan elbiseleri yenileriyle oyun içinde değiştirme gibi seçenekler sunmak için.Bunun nasıl yapılacağı hakkında fikriniz varsa yardımcı olabilirmisiniz.

  39. ahmet diyor ki:

    Hocam çok baktım ama birşey anlamadım.bana satılık olsa dahi yaralı olabilecek bir kaynak yada hazır bir yer önerebilirmisiniz.Çok acil elde etmem lazım.Şimdiden yardımlarınız için teşekürler.

  40. ahmet diyor ki:

    tamam teşekürler yinde.eyvallah.

  41. Suat diyor ki:

    Merhaba ben puan objelerinin yere yakınlığını ayarlamak istiyorum ama 3 ve 6 olarak otomatik geliyor objelerin Y değeri nasıl yapabilirim.

  42. Suat diyor ki:

    Tamam sorumun çözümünü buldum ihtiyacı olanlar için zemin prefablarının içinde bulunan spawmların y değerini düzeltirseniz çözüm oluyor istediğiniz yükseklikte ayarlayabilirsiniz…
    Yasir sanada çok teşekkürler bu programla ilgili neredeyse dişe dokunur tek kaynak site senin siten…

  43. ahmet diyor ki:

    iyi günler hocam ben şu şekilde bir kod yazdım
    ama en hata verdi convert etmeme hatası anlamadım
    yardımcı olabilirmisiniz.Şimdiden teşekürler.

    trueResult=leftNumber+rightNumber;
    falseResult=trueResult+Random.Range(-2,3);
    ***hatanın olduğu satır:*** mathText=GetComponent().text=leftNumber.ToString() + ” + ” + rightNumber.ToString();
    resultText.GetComponent().text=falseResult.ToString();

    Hata mesajı*******Assets/MathSceenne/Scripts/GameController.cs(34,25): error CS0029: Cannot implicitly convert type `string’ to `UnityEngine.UI.Text’

    • TT diyor ki:

      mathText bir Text değişkeni ise:

      mathText.text = leftNumber.ToString() + ” + ” + rightNumber.ToString();
      resultText.text = falseResult.ToString();

  44. ahmet diyor ki:

    Öğrenciyim Yoksa sitenize ve bu kadar yararlı işler yaptığınızdan dolayı bağışta bulunurdum.
    Çok teşekürler. Bu kadar hızlı ilgilenmenizden dolayı.

  45. cenker diyor ki:

    farklı object pooling yerine generic object pooling ile herşeyi pool edebilirdiniz score atıran küp containerlar zeminler yan duvarlar dahil ve pool hacminide başta büyük vermenize bile gerek yok sadece büyüyebilen bir pool yapmak yeter unity3d kendi tutorial var linkini yazıyım

    https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling

  46. zayut diyor ki:

    abi c# öğrenmek istiyorum nerden öğrenebilirm

    • yasirkula diyor ki:

      Ben C#’ı direkt öğrenmedim de önce Java öğrendim. İkisinin benzerliği bayağı olduğu için sonra C#’a kolayca alıştım. Java için Youtube’da video dersler izlemenizi öneririm.

  47. medeni diyor ki:

    Merhabalar yasir bey ben oyununuzdakş engellerin biraz daha uzatmak ve karekterin daha uzun zıplamasını nasıl sğlarım yardımcı oldugunuz şçşn çok teşekekrler

    • yasirkula diyor ki:

      Engelleri uzatmak için zemin prefablarını değiştirebilirsiniz. İşlemin ardından SonsuzYolScript component’indeki “Ileri Yol Objeleri Uzunluklar”ı güncellemeyi unutmayın. Karakterin zıplamasını değiştirmek için ise karakterdeki ZiplamaAnim animasyonunda değişiklikler yapabilirsiniz.

  48. unity game diyor ki:

    Merhaba bu kodda sphere nesnem space tuşuna basınca zıplıyor ama ben telefonun ekranına dokununca zıplamasını istiyorum bu kodu nasıl çevirebilirim dediğim gibi acaba yardımcı olabilirsen sevinirim.

    kod:

    var jumpH = 8;
    var isFalling = false;
    function Start () {

    }

    function Update () {
    this.gameObject.GetComponent.().AddTorque(new Vector3(-Input.GetAxis(“Vertical”),0,Input.GetAxis(“Horizontal”)));

    if(Input.GetKey(KeyCode.Space)&& isFalling == false){

    GetComponent.().velocity.y = jumpH;
    isFalling = true;
    }

    }

    function OnCollisionStay(){ isFalling = false;

    }

  49. cemguv diyor ki:

    Selam dostum. İyi çalışmalar diliyorum . Bu oyunda limit ayarlarını bir türlü değiştiremedim . Player ve Sonsuz yol scriptlerinde ki -2.75 ve 2.75 olan değerlerle oynadım ama yine aynı yollarda ilerliyor hep.4 gündür uğraşıyorum kodu kendim yazsam bu kadar sürmezdi ya 🙂

  50. cemguv diyor ki:

    Sorunu Çözdüm dostum [HideInInspector] yazısını kaldırınca açıldı ayar.

  51. unity game diyor ki:

    dostum ben puan objelerini ekledim ses felanda yaptım objeleri destroyda ettim ancak oyunumdaki sonsuz yola bu puan objelerini rasgele sonsuza dek ekleyemedim ve sen burda havuza ekleyerek yapmıssın yapamadım ben kolayca nasıl yapabilirim.

    • unity game diyor ki:

      buda kodum :
      var coins:AudioClip;

      function OnTriggerEnter(Carptigim : Collider) {
      if (Carptigim.tag==”eleman”)
      {
      GetComponent.().PlayOneShot(coins);
      yield WaitForSeconds(0.7);
      Destroy(this.gameObject);
      }
      }

      function Update () {

      }

    • yasirkula diyor ki:

      Puan objesini havuza tanıtmak için “Sonsuz Yol Script” component’indeki (hangi objeye atandığını hatırlamıyorum ama kolayca bulursunuz diye düşünüyorum) “Puan Prefab” değişkenine değer olarak kendi puan objesi prefab’ınızı verin.

      Player puanı topladıktan sonra puan objesini geri havuza yollamanız lazım. Normalde bunu player scriptinden “Sonsuz Yol Script” component’ine erişip bu script’teki PuanObjesiniHavuzaYolla fonksiyonunu çağırarak yapıyorduk. Sizin puan objenizden SonsuzYolScript’e erişmek için ise singleton kullanabiliriz.

      SonsuzYolScript’e “public static SonsuzYolScript instance = null;” isminde bir değişken ekleyin. Ardından aynı scripte şöyle basit bir fonksiyon ekleyin:

      void Awake()
      {
      	instance = this;
      }
      

      Artık kendi kodunuzu şu şekilde güncelleyebilirsiniz:

      var coins:AudioClip;
      
      function OnTriggerEnter(Carptigim : Collider) {
      	if (Carptigim.tag=="eleman")
      	{
      		GetComponent.<AudioSource>().PlayOneShot(coins);
      		yield WaitForSeconds(0.7);
      		gameObject.SetActive(false);
      		SonsuzYolScript.instance.PuanObjesiniHavuzaYolla(transform);
      	}
      }
      
      • unity game diyor ki:

        Cevabın için çok teşekkür ederim dostum ancak benim yol kodum burada kullandıgın kod değil üstte söylediğin işlemleri bu koda uyarlayabilirmiyim eğer çok uğraştıracaksa seni yormayayım hiç uğrasma ama eger kolaysa yardım edersen sevinirim yol kodumda şöyle:

        using UnityEngine;
        using System.Collections;

        // Bu script infinite road yapmaya yarar
        public class YolScript : MonoBehaviour
        {
        // tek bir seferde oyunda yer alacak olan yol sayısı
        public int yolSayisi = 10;

        // yol prefabı
        public GameObject yolPrefab;

        // ekrandaki yolları depolayan array
        private Transform[] yollar;
        private Transform kamera;

        // en başta kalan yolun index’ini depolayan değişken
        private int bastakiYol;

        private float yolUzunluk;

        void Start()
        {
        kamera = Camera.main.transform;
        yollar = new Transform[yolSayisi];
        bastakiYol = 0;

        // yolSayisi kadar yol oluşturup bunları uç uca diz
        yolUzunluk = yolPrefab.GetComponent().sharedMesh.bounds.size.z;
        for( int i = 0; i = bastakiYolZ + yolUzunluk )
        {
        // baştaki yolu en sona taşı
        yollar[bastakiYol].position += new Vector3( 0, 0, yolUzunluk * yolSayisi );

        bastakiYol++;
        if( bastakiYol >= yolSayisi )
        bastakiYol = 0;
        }
        }
        }

  52. unity game diyor ki:

    veya senin yapmış oldugun temple run projesinde şöyle bi değişiklik yapabilirmiyim karakter yerine sphere nesnesi olucak yolda saga sola donme olmıyıcak sadece ileri dogru sonsuz olucak ve yoldaki delikler yani boşluklar olmuyucak projede değişiklik yaparak bunları yapabilirmiyim

    • yasirkula diyor ki:

      Evet yazarsınız ve kod şu ankine göre çok daha basit olur ancak şu anda kod olarak bir şey düşünemiyorum. Yol prefab’ında puan objelerinin spawn olabileceği yerleri Empty GameObject’ler kullanarak işaretlersiniz yine. Toplanan puan objelerini de daha basit bir pool’a atabilirsiniz (şu linkteki pool işinize yarayabilir: https://github.com/yasirkula/UnityGenericPool). Şu anda YolContainer’da yazdığım YolaPuanObjeleriDiz fonksiyonunu da biraz değiştirerek kendi sisteminize uygun hale getirmeye çalışabilirsiniz.

      Benim tavsiyem yine Infinite Road örneğinin kodlarıyla devam edin ve bu eklemeleri o projeye yapın. Çünkü bu Temple Run projesi dönemeçlerdir, çukurlardır vb. şeyler için yazıldığı için sizin projenize pek uygun değil.

      • unity game diyor ki:

        öyle yapayım ozmn dostum teşekkürler ancak kafama bişey takıldı empty game objectlerle sadece benım ekledıgım kadar puan objesı eklemezmı yani mesela 3 tane empty game object atınca 3 tane puan objesi hep aynı yerlere puan objesiini spawn etmezmi nasıl sonsuza kadar puan objesi ekliyecekki ?

      • yasirkula diyor ki:

        Arkada kalan yolu ileriye her ışınladığınızda, puan objelerini yol üzerindeki bu 3 nokta üzerinde rastgele spawn eden bir fonksiyon çağırmalısınız. Temple Run’daki YolaPuanObjeleriDiz fonksiyonu buna benzer çalışıyor: önce puan objelerinin dizileceği bir yön (sağ veya sol) belirleniyor. Ardından bu yöndeki puan spawn noktaları bir değişkene atılıyor ve bu spawn noktaları üzerinde belli bir uzunlukta puan objesi dizisi spawn ediliyor.

      • unity game diyor ki:

        verdigin linkte 2 tane dosya var dostum readme ve poolscript ikisinidemi kullancam yoksasadece pool scriptimi

      • yasirkula diyor ki:

        Sadece PoolScript.

  53. unity game diyor ki:

    https://www.youtube.com/watch?v=52Gb4s5-jVE bu video dersteki olay işime yarar ozmn sanırım

    • yasirkula diyor ki:

      Mobil internet kullanıyorum, bu yüzden videoyu tam izleyemedim. Ama videonun başlığından yola çıkarsak, işinize yarayabilir herhalde.

      • unity game diyor ki:

        ilgin için teşekkür ederim dostum bu benım sonsuz yolu senin infinite road örneginden almıstım calsııyor ancak scene deyken yolla alakalı hiç bişey gözükmüyor ama oyun baslayınca gözüküyor ve çalısıyor sahnede nasıl göreceğim bu yolu

      • yasirkula diyor ki:

        Project panelinde yol prefabı objesi olmalı, onu Hierarchy’e sürükle-bırak yapmanız lazım. Yolu düzenlemeniz bitince Inspector’dan Apply deyip yol objesini Hierarchy’den silmeyi unutmayın.

  54. unity game diyor ki:

    teşekkürler dostum çok sağol 😀 senide uğraştırdım

  55. ahmet diyor ki:

    Merhabalar;Bir sorum olacaktı.Hocam ben reklam eklemeye çalıştığımda sdk’nin içindeki google play services içindeki lib projekti dahil etmem gerekiyor proje içine; ama sdk içinde libproject kısmı yok benim sdk -extralar yolunda.Unity 5.2 kullanıyorum libproject nasıl halledebilirim.Sizin Not :2 kısmında belirtiğiniz yöntemlede reklam çıkmıyor yardım edebilirmisiniz.Teşekürler.

  56. Vygarpp diyor ki:

    Merhaba hocam bir sorum olucaktı da.
    Unity yeni başladım.Amacım android infinite run tarzı bir oyun yapmak.Şimdi bu proje de rastgele yol atıyor.Arka yolları siliyor.Peki biz belirli bir map yapsak.İçindeki engellerin yerleri değişse çok kasma meydana gelir mi acaba ve bunu yapmak zor olur mu.Tam hatırlamasam da bu çılgın hırsızlar oyunu da böyle birşeydi sanki belirli çevre vardı engeller değişiyordu.Yoksa çevre de mi rastgele atanıyor o oyunlarda tam hatırlamıyorum 😀
    .Bu proje ile temple run ya da çılgın hırsızlar arasında ne gibi farklılıklar var.Bilginiz var mı?Şimdiden teşekkürler

    • yasirkula diyor ki:

      Videosundan gözlemlediğim kadarıyla Despicable Me’nin oyununda da Subway Surfers gibi harita rastgele oluşuyor. Ama çeşitlilik çok olduğundan belki öyle hissetmişsinizdir.

      Benim yaptığım projede sadece yol objeleri rastgele atanıyor, çevre yok. İlaveten, engeller yol objelerinin prefab’larının içerisine gömülü durumda. Belki diğer oyunlarda engeller daha sonradan yolun üzerine ekleniyordur.

      • vygarpp diyor ki:

        Cevap için teşekkürler.Hocam peki bu çevreyi nasıl yaparız?Çevreyi yaptıgımız zaman yol çevreyle birlikte yapılıp engeller sonradan rastgele atılmak zorunda mı ?Yoksa başka yolu var mıdır?

      • yasirkula diyor ki:

        Çevre nasıl oluyor bilmiyorum. Belki engellerin prefab’larına gömülüdür belki engellerden ayrı oluşuyordur; bu konuda bir tecrübem yok henüz.

  57. Hüseyin diyor ki:

    Yasir abi ben şu havuz işini beceremedim senin yazdığınıda çözemedim bana kodlarını kısaca yazarmısın mesela küp objesini a ya basınca havuza yollamak e ye basınca geri terraine koymak istiyorum kısaca kodlarını yazarmısın?

    • yasirkula diyor ki:

      Şuradaki PoolScript.cs’i de de kullanabilirsiniz: https://github.com/yasirkula/UnityGenericPool

      Şuna benzer kodlar kullanacaksınız gibi:

      using UnityEngine;
      
      public class BlablaScript : Monobehaviour
      {
      	private PoolScript<Transform> havuz = new PoolScript<Transform>( kupPrefab );
      
      	public Transform kupPrefab;
      	
      	void Awake()
      	{
      		havuz.Populate( 5 );
      	}
      	
      	void Update()
      	{
      		if( Input.GetKeyDown( KeyCode.E ) )
      		{
      			Transform kupObjesi = havuz.Pop();
      			
      			// kupObjesi'ni terraine koy
      		}
      		else if( Input.GetKeyDown( KeyCode.A ) )
      		{
      			/*Transform havuzaYollanacakTransform = blablabla;
      			havuz.Push( havuzaYollanacakTransform );*/
      		}
      	}
      }
      
  58. Hüseyin diyor ki:

    Abi birde ben traffic racer tarzı oyun yapıyorum yolun yaratılması olayına takıldım mesela ben yolun ortasına gelince yolun hemen sonuna yeni bir yol yaratmak yolun sonuna gelincede eski yolu silmek istiyorum bunu ise havuz sistemiyle yapmak istiyorum nasıl yapabilirim

  59. Saliha diyor ki:

    gameover menüsünde ana menü butonunun üstüne restart butonu nasıl yapılıyor. ama oyun ful baştan restart olunca ana menü açılıyor. level, oyun ekranının resetlenmesi için . en baştan hangi kodları nereye yazmam gerekiyor

    • yasirkula diyor ki:

      Arayüzle oynamak için UI dersimden faydalanabilirsiniz: https://yasirkula.com/2015/01/21/unity-ui-arayuz-sistemi/

      Restart’a basınca menü gelmesin istiyorsanız aklıma gelen en basit seçenek, AnaMenu’ye “public static bool oyunuDirektBaslat = false;” değişkeni ekleyip Start fonksiyonuna da şu kodu eklemek:

      if( oyunuDirektBaslat )
      OyunuBaslat();

      Restart butonuna basınca AnaMenu.oyunuDirektBaslat’ı true, Ana menü butonuna basınca ise false yapmalısınız.

      • Saliha diyor ki:

        playeri nasıl yaptınız.

      • yasirkula diyor ki:

        Unity içerisinde küpleri birleştirerek yaptım. Animasyonları da Window-Animation panelini kullanarak yaptım.

      • Saliha diyor ki:

        yaptığım proje farklı. yine de mantığı kullanmaya çalıştım olmadı. projeyi göndersem restart tuşuna fonksiyon verebilirmisiniz

      • yasirkula diyor ki:

        Restart kodu genelde şöyle oluyor: UnityEngine.SceneManagement.SceneManager.LoadScene( UnityEngine.SceneManagement.SceneManager.GetActiveScene().name );

  60. medeniinsa diyor ki:

    bu kullandığınız sesler hangi oyunun sesleri. telif hakkı var mı

  61. ahmet diyor ki:

    Hocam merhabalar.
    Unity de silaha kodla geri tepme nasıl verilebilir.Animasyon yaptım bir türlü çalışmadı.
    animation=getcomponent().Play(“Animasyon adi”); önce bunu denedim bir türlü çalışmadı.Silaha geri tepmeyi kodla nasıl verilebilirim.
    Teşekürler.

    • yasirkula diyor ki:

      GetComponent(Animation).Play(“Animasyon adi”); yaptıysanız scriptin atandığı objede Animation component’i (Animator değil) olmalı ve bu component’teki Animations altında “Animasyon adi” animasyonu ekli olmalı.

  62. medeniinsa diyor ki:

    playerin animasyon mantığı nasıl. Zıplama animasyon kosma animasyon olme animasyon bunlar neye göre çalışıyor. Ben mesela parmakla yukarı çekince zzıplamasını değil de baska bir animasyon göstermek istiyorsam nereleri değiştirmeliyim. Animation bölümünde 3 animasyon ekli . sırasına göre mi ayarlanıyor. birinci element zıplama anim. ben buraya kendi yaptığım bir animasyonu seçersem zıplama fonksiyonu mu kabul edilcek yani parmağı yukarı kaldırınca seçtiğim anim mi başlayacak. Kısacası unity bu animasyonların ne yapacaklarını nasıl algılıyor.

    • yasirkula diyor ki:

      Player.cs scriptinde “private Animation anim;” diye bir değişken var; animasyonları bu değişkeni kullanarak çalıştırdım. Örneğin zıplama animasyonu için “anim.Blend(“ZiplamaAnim”);” diye bir kod yazdım. Player’ın Animation component’inde olan ZiplamaAnim isimli animasyon çağrılıyor yani. Animasyonların isimleri scriptteki isimlerle aynı olmalı.

  63. Furkan diyor ki:

    Arkadaşlar yeni bir uygulama yaptık sizlerinde yorum ve desteğini bekliyoruz https://play.google.com/store/apps/details?id=com.HyperCry.ExitWhere
    Oyun ucretli oldugu icin promosyon kodu cikardik buradan alabilirsiniz; kodlar 09.11.2016 saat 22 den sonra kullanima acilacaktir
    C1YF36BXLE0S4G8MPER10Y6
    RWCD4URHFRQSHEEL4XTBCSB
    9L1Z3YXPHEN8G41B64Q4DKB
    E2LJYLVB243MM08VX75QTVK
    PSX431TSPZ017T9ZSC728TU
    D2N6STR50MDW549QUF1DTVF
    3CXS88W93EAGWDPVPF4GWF1
    ACX2KX5HAQU3UPNRKBFBHM5
    Z0KX2PJRWPVVURECXPYQ41H
    DBQMSD4WKY9AYZL8Y5S9VDA
    NDG8FCYV076UDU01YDM9YJV
    VSET61KZ5P244CF8SXEEBZ9
    32T435E0JGTF0CG3EESLDZR
    3PJJVKW0J3M66WZ5EH2MMQ7
    UCAQYWRHQ80AFX5QN0V4E4E
    X6WY4DF9L78X21LZ0XZ18B8
    JE1VK29LS9NQ0MJYLB02E4F
    EPTRRT4ZDM4BZ9PXNPK26PQ
    SWARZAYU9T7AR4EBAT0W22U
    5QJU1950046U2NVH8MC3KJ7
    8DMS94C5B1T79PSNT6GRPK6
    SLMYUMBFMNSDCNHLM3PHZ03
    N7203ZK0HXBMWZRSSSJZC0N
    ET9TKDL236KE7XL2XAP8TAP
    4J0TMZ2A9S70PGV99V1C12S

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