Unity oyun yapımı

Merhaba, Unity’nin çalışma mantığını anlamak için bu küçük oyunun nasıl yapıldığını okuyabilirsiniz. İçinde fizik olaylarını, ui arayüzünü, doku kaplama (texture) , kod ile nesnelere ulaşıp onlara işlev kazandırdığımız bir projedir.

Bir topu zemin üzerinde yazacağımız kodla hareket ettireceğiz ve etkileşime geçen nesneye göre skoru arttırıp azaltacağız.

1- Sahneye zemin olarak bir plane ve duvarları oluşturmak için 4 adet küp ekliyorum. Küpleri duvar şekline getirerek üstü açık bir kutu gibi oyun sahnesi oluşturdum.
2- Biraz görsellik kazandırmak için Five Seamless Tileable Ground Textures isimli kaplamaları asset store\’dan indiriyorum. Link: https://assetstore.unity.com/packages/2d/textures-materials/floors/five-seamless-tileable-ground-textures-57060

İndirdiğim kaplamaları zemin, duvar ve top nesneme veriyorum. Sürükleyip bırakarak atayabilirsiniz veya material oluşturup oluşturduğunuz bu materiali nesnelere verebilirsiniz. Böylece sahnemiz tamamlanmış oluyor.

3- İşe öncelikle topu hareket ettirerek başlayalım. Bunun için iki farklı yol kullanabiliriz;
– Transformunu değiştirebiliriz: ancak bu durumda objemiz fizik kurallarından bağımsız hareket eder. Kütle, yer çekimi, sürtünme gibi fizik olayları devreye girmez.
– Rigidbody ile hareket ettirme: Nesneye Rigidbody ekleyip script içinden o nesneye ulaşıp kuvvet uygulayabiliriz. Biz diğer objelerle de etkileşime geçmesini istediğimizden dolayı ikinci yolu uygulayacağız. Topumuza bir Rigidbody bir de c# scripti atıyorum. Script içeriği:

public int Hiz = 1;
private Rigidbody r_body;

void Start()
{
   r_body = GetComponent<Rigidbody>();
}

void Update();

if(Input.GetKey(KeyCode.W))
{
   r_body.AddForce(0, 0, Hiz);
}
if (Input.GetKey(KeyCode.S))
{
   r_body.AddForce(0, 0, -Hiz);
}
if (Input.GetKey(KeyCode.A))
{
   r_body.AddForce(-Hiz, 0, 0);
}
if (Input.GetKey(KeyCode.D))
{
   r_body.AddForce(Hiz, 0, 0);
}

Start metodu script çalıştığında bir defa çalışmaktadır.
Update metodu ise obje yok edilmediği sürece sürekli çalışan bir metoddur.
Input.GetKey tuşa basıldığı anda devreye girer ve basıldığı süre kadar çalışır.
GetKeyDown basıldığında bir defa çalışır.
GetKeyUp Basılıp bırakıldığında çalışır.

  • public olarak int tipinde bir değişken tanımladık, bunu AddForce metodunda kuvvetin şiddeti olarak kullanıyorum (public tipindeki erişim belirleyiciler unity oyun motorunda inspector penceresinde görünürler bu sayede değerini sahneden de değiştirebiliriz).
  • Rigidbody tipinde r_body isminde bir değişken tanımlıyorum ve start metodu içinde r_body = GetComponent<Rigidbody>(); komutu ile bu scriptin bağlı olduğu nesne (top) üzerindeki Rigidbody componentine ulaşıyorum.
  • Update metodu içinde ise Input.GetKey(KeyCode.W) ile yön tuşlarına basılıp basılmadığını kontrol ediyorum ve yöne göre r_body.AddForce(0, 0, Hiz) rigidbody\’e kuvvet uyguluyorum.

Topumuza fizik material ekleyerek çarptığı yerlerden sekmesini sağlayabiliriz. Bunun için Create -> Physic Material seçilir.

4- Fizik materyalleri objemizin çarpışma durumunda nasıl tepki vereceğini yönetir. Sekme, zıplama birbirini itme gibi özellik kazandırmak istersek bunu kullanabiliriz. Üzerinde ayarlar bulunmaktadır:

Dynamic Friction: Obje hareket halindeyken ne kadar zamanda durma eylemine geçeceğini belirler.
Static Friction: Obje hareketsizken harekete geçmesi için ne kadar güç uygulanması gerekeceğini belirler.
Bounciness: Sekme şiddedidir. 0 ila 1 arası değer alır. 0 hiç sekme yaşanmaz 1 maksimum değer olduğu için topumuzun düştüğünü hayal edersek aynı derecede geri sekmesi gerekir.
Friction Combine: Obje çarpıştığında çarpıştığı objenin friction\’ı ile kendi friction\’ı arasında nasıl bir etkileşim olacağını buradan belirleriz.

1- Avarage: Çarpışan objelerin ortalamasını alır.
2- Minimum: Çarpışan objelerden hangisinin değeri daha düşükse düşük olan bu değeri diğerine de uygular.
3- Multiply: İki friction\’ı birbiriyle çarpar.
4- Maximum: Büyük olan dikkate alınır.

Bounce Combine: Çarpışma durumunda zıplama için geçerlidir. Ayarları için yukarıdaki seçenekler aynen geçerlidir.

Buraya kadar elimizde içinde kod ile hareket ettirdiğimiz topumuz ve sahnemiz var. Bir sonraki aşamada Colliderların çarpışması ile puan toplayıp ui elemanlarını kullanarak ekrana skor yazdıracağız.