Bugün Unity’nin 2D özellikleri ile Plants vs. Zombies klonlayacağız. İşleri basit tutmak için, menü, çoklu seviyeler veya kesim sahneleri gibi tüm süslü şeyleri görmezden geleceğiz ve arka bahçede Zombilerle savaşmaya odaklanacağız. Öğretici gerçekten uzun ve ayrıntılı olacak, ancak sonuç 130 satırdan az kod olacak!

İşte oyunun bir önizlemesi:

Bitkiler vs Zombiler

Gereksinimler

Bilmeniz Gerekenler
Bu Eğitici herhangi bir ileri bilgi gerektirmez. Unity motorunun temel bir anlayışı hala gereklidir. Motora alışmak için Unity 2D Pong Oyunu gibi daha kolay Unity Eğitimlerimizi okumaktan çekinmeyin.

Unity Sürümü
Bu Kılavuzda Unity 5.0.1f1 kullanacağız. Daha yeni sürümler de çalışacaktır, eski sürümler çalışabilir veya çalışmayabilir. Unity 5’in ücretsiz sürümü artık tüm motor özellikleriyle birlikte geliyor ve bu da onu önerilen sürüm yapıyor.

Projeyi Yükleyelim
Oyun üzerinde çalışmaya başlayalım. Unity’yi başlatıp Yeni Proje‘yi seçeceğiz:

Yeni Proje Oluşturma

Projemize adını vereceğiz, Yerel Disk C: \ gibi herhangi bir konumu seçeceğiz ardından 2D’yi seçip Proje Oluştur‘u tıklayacağız:

Proje ismi , konumu ve yeni proje oluştur.

Hiyerarşide Ana Kamerayı(Main Camera) seçersek, Arka Plan Rengini siyaha ayarlayabilir, Boyutu ve Konumu aşağıdaki resimde gösterildiği gibi ayarlayabiliriz:

Kamera Özellikleri

Çim Oluşturmak

Çim döşemesi oluşturmak için Paint.NET veya Photoshop gibi bir araç kullanacağız:

Not: resme sağ tıklayın, Farklı Kaydet … ‘i seçin, projenin Assets klasörüne gidin ve yeni bir Sprites klasörüne kaydedin.

Proje Alanındaki çim döşemesini seçelim:

Çimen Seçimi

Ardından, Inspectorden İçe Import Ayarlarını değiştirin:

İçe Aktarma Ayarları

Not: 32 Piksel – Birim değeri;
32 x 32 pikselin oyun dünyasındaki bir birime sığacağı anlamına gelir. Bu değeri tüm dokularımız için kullanabileceğiz.

Daha sonra görüntüyü Proje Alanından Sahneye sürükleyerek oyuna ekleyebiliriz:

Çimeni Scane ekranına eklemek

Bunu (0, 0) olarak konumlandıracağız, böylece oyunumuzun sol alt tarafında olacak:

Çim Pozisyonu

Sıralama Katmanı Ekleme
Bir 2D oyun yapıyoruz, bu nedenle üçüncü boyutu derinlik efekti olarak kullanamayız veya arka plan ile ön planı kolayca ayırt edemeyiz. Bunun yerine Unity’ye önce hangi öğeleri çizmesi gerektiğini söylemek için bir Sıralama Katmanı kullanacağız. Örneğin, önce arka planımız çizilmeli ve daha sonra bitkiler onun üzerine çizilmelidir (dolayısıyla arka planın üstüne).

Inspectordeki Sprite Renderer component’e göz atarsak grass Sorting Layer‘ı değiştirebiliriz:

Sorting Layer listesinden Sorting Layer .. ‘ı seçelim, bir Background layer ekleyelim ve aşağıda gösterildiği gibi en üste taşıyalım:

Sorting Layer Arkaplan Seçimi

Daha sonra çimi tekrar seçer ve önceden oluşturulan Arka Plan Sıralama Katmanını atarız:

Arkaplan Görseli

Not: Birlik katmanları yukarıdan aşağıya doğru çeker, bu nedenle arka planda olması gerekenler listenin en üstünde olur.
Şimdi çim daima bitkilerin ve zombilerin arkasına çekilecek.

Çim’i tıklanabilir yapma

Daha sonra build menüsünde çalışırken bir çim döşemenin tıklanıp tıklanmadığını öğrenmenin bir yoluna ihtiyacımız olacak. Unity’de bunu yapmanın her türlü farklı yolu vardır, ancak en kolayı sadece çim tıklandığında Unity tarafından otomatik olarak çağrılan OnMouseUpAsButton işlevini kullanmaktır.

Şimdi akılda tutulması gereken şeyler var ; Unity bunu yalnızca Game Object öğesinde bir Collider varsa yapar. Şimdi Inspector de Component-> Physics 2D -> Box Collider 2D‘yi seçelim ve Trigger seçeneğini etkinleştirelim:

grass için collider

Not: Is Trigger’in etkinleştirilmesi, çimlerin her türlü çarpışma bilgisini alacağı anlamına gelir, ancak işler aslında çarpışmayacaktır. Eğer bir Zombi bir çim döşemeye girerse, onunla çarpışmaz.

Çim çoğaltma

Şu anda oyunumuzda sadece bir çim kiremit var. Hiyerarşide sağ tıklayalım, Çoğalt’ı seçip (1, 0) olarak konumlandıralım. Sonra tekrar çoğaltır ve (2, 0) olarak konumlandırırız. Sol alt döşemenin (0, 0) ve sağ üst döşemenin (9, 4) olduğu 10 * 5 çim döşemesine sahip olana kadar çoğaltmaya devam edeceğiz:

Çimen Çoğaltma

Sağlık Senaryosu

Zombiler Bitkiler’e saldırabilmeli ve Ateşleme Tesisi Zombiler’e zarar verebilmelidir. Unity’nin bileşen tabanlı doğasına bağlı kalacağız ve tüm varlıklar için sadece bir Health betiği oluşturacağız.

Proje Alanını sağ tıklatıp ardından Create-> C# Script‘i seçerek yeni bir Komut Dosyası oluşturabiliriz:

create script

Buna Health adını vereceğiz ve daha sonra yeni bir Scripts klasörü oluşturup içerisine taşıyacağız:

Sağlık Scripti

Komut Dosyasını çift tıklatarak açabilir ve değiştirebiliriz:

using UnityEngine;
using System.Collections;

public class Health : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}

Start veya Update fonksiyonlarına ihtiyacımız olmayacak, bu yüzden ikisini de kaldıralım. Bunun yerine, mevcut durumu izleyen bir int değişkeni ekleyeceğiz ve bu değişkeni azaltan bir işlev ekleyeceğiz. Mevcut sağlık durumu 0’ın altına düşerse işletme imha edilmelidir:

using UnityEngine;
using System.Collections;

public class Health : MonoBehaviour {
    // Current Health
    [SerializeField]
    int cur = 5;

    public void doDamage(int n) {
        // Subtract damage from current health
        cur -= n;

        // Destroy if died
        if (cur <= 0)
            Destroy(gameObject);
    }
}

Not: Unity’ye Inspector’daki cur değişkenini değiştirmek istediğimizi bildirmek için SerializeField kullandık. Bu genellikle herkese açık hale getirilerek yapılır, ancak bu durumda diğer Komut Dosyalarının cur değişkenine erişmesini istemiyoruz. Bunun yerine her zaman doDamage işlevini kullanmalıdırlar.

Komut dosyası daha sonra tüm Bitkiler ve Zombilere eklenecektir.

Ayçiçeği Bitki Oluşturmak

Animasyonu Çizim

Ayçiçeği için sadece kafasının hafifçe hareket ettiği boş bir animasyona ihtiyacımız olacak. İşte ortaya koyduğumuz şey:

Not: resme sağ tıklayın, Save As … seçeneğini seçin ve projenin Assets / Sprites klasörüne kaydedin.

Proje Alanındaki ayçiçeği görüntüsünü seçelim ve sonra Inspector içindeki Import Ayarlarını modify olarak belirleyelim:

Sun Flower İmport Setting