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

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. Yunus Emre dedi ki:

    Uzun zaman olmuş projenin üzerine ama şöyle bi hata alıyorum çözümünü bulamadım belki yardımcı olabilirsiniz
    NullReferenceException: Object reference not set to an instance of an object
    YolContainer.YolaPuanObjeleriDiz (ObjeHavuzu havuz, System.Int32 birDizidekiPuanObjesiSayisi) (at Assets/Scripts/YolContainer.cs:99)
    SonsuzYolScript.YolOlustur (YolContainer c, UnityEngine.Vector3 baslangicNoktasi, UnityEngine.Vector3 ileriYon) (at Assets/Scripts/SonsuzYolScript.cs:114)

    • yasirkula dedi ki:

      Yol prefab’larının içinde PuanSpawnPointSol ve PuanSpawnPointSag adında, puan dizilebilecek noktaları tutan iki adet GameObject olur (hazır yol prefab’larına bakabilirsiniz). Bu objeler yoksa bu hatayı alırsınız.

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. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.