UNITY’de Tower Defense (Kule Savunması) Oyunu Tasarlamak (Çeviri Ders)

Posted: 27 Temmuz 2013 by yasirkula in Oyun Tasarımı, UNITY 3D
Etiketler:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Hepinize merhaba,

Bu çeviri derste Unity‘de Tower Defense tarzı oyun yapmayı göreceğiz. Bu esnada Unity’nin Pathfinding teknolojisinden faydalanacağız. Dersin orijinal kaynağına gitmek için tıklayın (yalnız dersi yazdıktan bu yana orijinal metin fazlasıyla değişmiş): http://noobtuts.com/unity-tower-defense-game-step-1-introduction

Dersten tam anlamıyla verim alabilmek için Unity’de script yazma konusunda hatırı sayılır bir tecrübenizin olması lazım. Ayrıca Unity’nin ücretsiz sürümünü kullanıyorsanız elinizdeki Unity versiyonu en azından 4.2 olmalı.

DÜZENLEME (06.05.2014): Dersin yazarı yaşadığı teknik bir aksaklığın ardından sorunu çözmek için çeviriyi siteden kaldırmamı rica etti. Bu yüzden şu an için dersi PDF olarak paylaşıyorum: https://app.box.com/s/w3ca7phraz28uuunfggp (Alternatif link)

Dersteki TeddyPrefab için indirme linki: http://www.speedyshare.com/TwKKG/teddy.unitypackage

İleride yazar isterse dersi tamamen silmek durumunda da kalabilirim. Anlayışınız için teşekkürler.

Yorumlar
  1. volkansahin diyor ki:

    Merhabalar, yazılarınız için teşekkürler. Tower Defense’ı gerçekleştirdim ama oyunun görüntü modu nasıl böyle oldu onu tam bulamadım.(kalemle çizilmiş gibi) Ayrıca son zamanlardaki mobil oyun yazılarınızın devamını bekliyorum.

    • yasirkula diyor ki:

      Merhaba,

      Çizgi film tarzı görüntü için yazıda bahsedilen shaderı kullanmanız gerekiyor (Unity Pro gerekli) ama aslına bakarsanız Unity Basic sahibi olduğumdan ve daha önce hiç shader kullanmadığımdan shaderı nasıl kullanabileceğinizi (aktifleştireceğinizi) bilmiyorum. Google’a “Unity how to use shader” yazarsanız uygun bir sonuç bulursunuz gibime geliyor.

      Düzenleme: Şimdi baktım. Shaderı kullanmak için kırmızı ve beyaz renk materyallerinin “Shader” property’sine değer olarak atamanız yeterli.

  2. aziz balı diyor ki:

    Geliştirmek isteyenler buradan yararlanabilirler http://cgcookie.com/unity/cgc-courses/unity-tower-defense-course/ kule yapımını annlatmış değişik kuleler

  3. emre diyor ki:

    Öncelikle ders için teşekkürler. Fakat takıldığım yer en sondaki şu kule dikme yeri scripti yazdım ve kule dikme bölgelerine attım fakat towerslottan seçmeye çalışınca hiç seçenek çıkmıyo none çıkıyo sadece bu sorunu nasıl çözebilirim söylerseniz çok sevinirim

    • yasirkula diyor ki:

      Merhaba,

      Alıntı: “Şimdi TowerSlots.cs scriptini sahnedeki tüm kule dikme noktalarına atayın ve towerPrefab değişkenine değer olarak TowerPrefab’ı atayın.”

      Belki Inspector’dan towerPrefab’a değer atamayı unutmuşsunuzdur. Onun dışında herşeyi düzgün yaptıysanız sorununuzun kaynağını bilemiyorum. Bende güzel çalışmıştı.

  4. emre diyor ki:

    TowerSlot scriptini önceden elle yazmıştım ancak şimdi kopyala yapıştır yaptım hata olmaması için sonra kodun bulunduğu scripti Kule yerleştirme noktalarının hepsine attım. Tower Prefab değerini seçmeye kalktığımda önceden prefab olarak oluşturduğumuz kulem görünmüyor. Hatta hiçbirşey görünmüyor Sadece None yazıyor. Acaba yanlış birşeymi yapmışım ?

    • yasirkula diyor ki:

      Tower prefab’ınıza Tower scriptinin atandığından emin olun. Ardından towerPrefab değişkenine kule prefab’ını Project panelinden elle sürükleyerek değer olarak atayın.

  5. emre diyor ki:

    yasirkula bey acaba teamviever versem bi baksaniz olurmu ?

  6. emre diyor ki:

    dediğiniz gibi yaptım fakat Console bölümünde NullReferenceException:Object Reference not set to an instance of an object diyor ve şu satırı gösteriyor : GUI.contentColor = (altinKontrol.gold >= towerPrefab.buildPrice ? Color.green : Color.red);

  7. emre diyor ki:

    Tamam sorunu çözdüm 😀

  8. Mehmet Kaya diyor ki:

    Merhabalar,
    Bu projenin source hali varmı acaba ? Çünkü çok sorunla karşılaştık işin içinden çıkalamıcak gibi. Nerde hatalar yaptığıma bakmalıyım.

    • yasirkula diyor ki:

      Tutoriali çevirirken projeyi ben de adım adım yapmıştım. O projeyi aradım bilgisayarımda ama bulamadım. Sildiğimi düşünüyorum o yüzden malesef yardımcı olabileceğimi sanmıyorum.

  9. negar diyor ki:

    merhaba ,ilk olarak cok tesekur ederim,ama ben ikinci bir dosman ekliyorum ,hareket ediy ama kule tarafinan vurulmuyor buna nasil yapicam?

    • TT diyor ki:

      Kule tarafından vurulmuyor’dan kastın kule hiç ateş etmiyor düşmana değil mi? Yoksa kule ateş ediyor da kurşun düşmanın içinden mi geçiyor?

      • negar diyor ki:

        ates ediyor ama olmuyor ,yeni o text hic gekmiyor

      • TT diyor ki:

        Taretin oyuna eklediğin düşmana saldırması için düşmanda Teddy.cs scriptinin olması gerekli ama taret düşmana ateş ettiğine göre Teddy scripti zaten eklediğin düşmanda var. Düşmanın üzerinde sağlığının gözükmesi için düşmanda Text Mesh componenti olması lazım. Düşmanın ölmesi Teddy.cs scriptindeki OnDeath fonksiyonunda gerçekleşiyor ve bunu da Bullet.cs tetikliyor. İşin ilginç tarafı bu durum senin eklediğiniz düşman için gerçekleşmiyor ve sebebini ben de bulamadım. Eğer sorunu çözersen burada da paylaş lütfen 🙂

  10. negar diyor ki:

    yinede bukadar ilgilendiniz icin tesekur ederim,hepaini yapmisim olmuyor,ama simdi oyun basladinda bu ikinci dusman olmuyor ama biraz gecdikten sonar kuleler cogaldiktan sonar oluyorlar,niye anayamadim

  11. negar diyor ki:

    bide bi sorun daha var , play tusuna bastimda niye oyun reset olmuyor ve ayni kaldi yerden devam ediyor?:)

    • yasirkula diyor ki:

      Belki oyunu yanlışlıkla Pause ediyorsunuzdur. Yoksa dediğiniz şeyin olmaması lazım.

      Düşmanın geç ölmesinin sebebi belki canının çok olmasıdır (yanlışlıkla Inspector’dan Teddy component’inin altındaki Health değişkenini aşırı miktarda artırmış olabilirsiniz).

  12. max78 diyor ki:

    ben oyunu başlat tuşuna basınca karakterlerine “bilinmeyen karakter” diyor .hata veriyor nasıl düzelte bilirim?

      • max78 diyor ki:

        ya karakterleri yazıyorum gözükmüyor yorumda büyüktür ve küçüktür işaretleri

      • yasirkula diyor ki:

        Malesef öyle bir sorun var. HTML işaretlerini yanlış gösterebiliyor. Ama bu yorumda nedense düzgün gözüküyor. Scriptinizde aldığınız hatanın satırını kopyala-yapıştır yaparsanız güzel olur.

  13. kulaoglu diyor ki:

    Ben fps oyun yaptım ve bu scriptleri düşman için uygulamak istiyorum castle olarak kendimi göster dim.Beni takip edip bana ulaşınca canımı azaltacak(castle health).Ama ben hareket edince ayılar benim illk oyuna başladığım yere gidiyor beni takip etmiyor bunu nasıl düzeltebilirim

  14. GUI diyor ki:

    yasir bey benim bir sorum olacak ben bir gui button yaptım ve ona basınca karakter sola hareket ediyor ama uzun süre basılı tutunca gitmiyor.basılı tutuncada gitmesini istiyorum .yardım ederseniz sevinirim hiç bir sitede bulamadım.

    • yasirkula diyor ki:

      Kod olarak yaptıysanız OnGUI fonksiyonunun içinde GUI.Button yerine GUI.RepeatButton komutunu kullanın. Eğer sahneye GUI Texture koyarak yaptıysanız OnMouseDown fonksiyonunu kullanmak yerine OnMouseDrag fonksiyonunu kullanın.

      • GUI diyor ki:

        çok teşekkürler yaptım

      • GUI diyor ki:

        yasir bey oyunumda guı button kullanıyorum ama çok sorun çıkarıyor guı texture kullanmak istiyorum ama ben şöyle bir kod kullandığımdan dolayı:

        if (GUI.RepeatButton(new Rect(155,300,87,36),”<==="))
        {
        transform.Translate(-0.1, 0, 0);
        }

        guı texture attığımda guı texture hareket ediyor ama ben karakterin hareket istiyorum bunu nasıl düzeltirim?(yani bu kodun yanına karakterin tagını veya ismini nasıl eklerim)

      • yasirkula diyor ki:

        GUITexture’la yaşadığınız sorunu tam anlayamadım; bir daha açıklayabilir misiniz?

      • GUI diyor ki:

        benim yazdığım kod guı button a basınca karakterin hareket etmesini sağlıyor ama guı texture kullandığımda bu kodu ona yazınca karakter yerine.guı texture hareket ediyor(guı button direk karakterin scriptinde olduğu için sorun olmuyor) .Yani kullandığım kodun başına karakterin ismini veya tagını eklersem kodu guı texture kullansam bile texture bassınca karkter hareket edicek.[
        Açıkcası :transform.Translate(-0.1, 0, 0); buna nasıl karakterin ismini veya tagını bağlarım].mesela [oyuncu.transform.Translate(-0.1, 0, 0);]

        umarım açıklayabilmişimdir. 😉

      • yasirkula diyor ki:

        Diyelim ki karakterin tag’ı “Player”. O zaman GameObject.FindWithTag( “Player” ).transform.Translate( -0.1, 0, 0 ); yapmanız lazım.

      • GUI diyor ki:

        çok teşekür ederim yaptım 🙂

  15. serhat diyor ki:

    Hocam şimdi pdf içinde anlatılanlara göre menü için kod yazıyoruz menu.cs … sonra play ve exit butonu için ayrı bir c# mı açıyoruz hepsine ayrı bir c# açıp mı yazıyoruz ve bu yazdığımız kodları nereye atıyoruz .

  16. Serhat diyor ki:

    Hocam play ve quit basınca herhangi bir şey olmuyor neden acaba

    • yasirkula diyor ki:

      Quit editörde çalışmaz. Aşama 3’ün başında scene_main adında yeni bir sahne oluşturup onu Build Settings’e ekliyoruz. O kısmı yapmadan Play butonu da çalışmaz.

  17. Serhat diyor ki:

    Hocam bende play ve quit butonları çıkmıyor neden olabilir build settings falan herşeyi yaptım

    • yasirkula diyor ki:

      Geç cevap için üzgünüm. Kodu birebir aynı yazdınız mı? Scriptin ismi “Menu” ve türü C# mı? Konsolda hata mesajı alıyor musunuz?

  18. Gökhan KARAGÖZ diyor ki:

    Merhabalar, çevirinizde ufak bir hataya rastladım hemen paylaşayım. Gördüğünüz yazıda “yane” kelimesi kullanmışsınız harf hatası. İyi çalışmalar dilerim.

    “Projeyi Oluşturmak ve Menü Sahnesi (Scene)
    Eğer hâlâ bir proje oluşturmadıysanız hemen bir yane oluşturun”

  19. serhat diyor ki:

    Hocam bu oyunu yaptığımızda Android uyumlu olur mu?
    + Birde şu link çalışmıyor, ayıcık model animasyonu:
    http://noobtuts.com/content/unity/tower-defense-game-step-1-introduction/teddy.unitypackage

  20. Burak diyor ki:

    teşekkürler. Hocam birde oyunu başlattığımda ekran mavi kalıyor oyun gelmiyor nerede hata yapıyorum yardım edebilir misiniz

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