Unity 3D Temple Run Tarzı (Infinite Runner) Oyun Örneği

Yayınlandı: 15 Ocak 2015 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde
Etiketler:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

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.

yorum
  1. Halim Toklu dedi ki:

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

    • yasirkula dedi 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 dedi ki:

    cok tesekkurler

  3. çağlar dedi ki:

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

    • yasirkula dedi 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 dedi ki:

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

    • yasirkula dedi 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 dedi 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 dedi 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 dedi ki:

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

    • yasirkula dedi 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. Mobil oyunlar için cihazdan cihaza göre ekran kaymasının kesin bir çözümü var mı?

  7. gamex dedi ki:

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

    • yasirkula dedi 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 dedi ki:

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

  9. yunus dedi ki:

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

  10. ibrahim YILMAZ dedi ki:

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

    • yasirkula dedi 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 dedi 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 dedi ki:

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

    • yasirkula dedi 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. 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

    Bu oyunu PDF olarak ders haline getirecek misin?

  15. kadir dedi ki:

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

  16. nurullah dedi 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 dedi 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 dedi 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 dedi ki:

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

  19. Mustafa Bektasoglu dedi 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 dedi 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 dedi 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 dedi ki:

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

  23. yunusemre dedi ki:

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

    • yasirkula dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

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

  26. yunusemre dedi ki:

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

    • yasirkula dedi 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 dedi 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 dedi ki:

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

  29. medethan dedi ki:

    ya kardes hadi yaa cok mu uzun

  30. Yunus kara dedi ki:

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

  31. medethan dedi ki:

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

    • yasirkula dedi 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 dedi 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 dedi ki:

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

  32. yardım edermisiniz dedi 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 dedi ki:

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

    • yasirkula dedi ki:

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

      • yardım edermisiniz dedi 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 dedi ki:

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

  33. ahmet dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

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

  35. ahmet dedi 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 dedi ki:

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

  37. maliyazici dedi ki:

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

  38. ahmet dedi 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 dedi 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 dedi ki:

    tamam teşekürler yinde.eyvallah.

  41. Suat dedi 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 dedi 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 dedi 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 dedi ki:

      mathText bir Text değişkeni ise:

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

  44. ahmet dedi 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 dedi 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 dedi ki:

    abi c# öğrenmek istiyorum nerden öğrenebilirm

    • yasirkula dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

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

  51. unity game dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

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

      • yasirkula dedi ki:

        Sadece PoolScript.

  53. unity game dedi ki:

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

    • yasirkula dedi ki:

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

      • unity game dedi 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 dedi 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 dedi ki:

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

  55. ahmet dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi 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 dedi ki:

        playeri nasıl yaptınız.

      • yasirkula dedi ki:

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

      • Saliha dedi ki:

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

      • yasirkula dedi ki:

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

  60. medeniinsa dedi ki:

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

  61. ahmet dedi 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 dedi 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 dedi 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 dedi 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 dedi 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