Unity’de Bayrak Yapımı (Cloth Sistemi)

Unity’de Bayrak Yapımı (Cloth Sistemi)

16 Şubat 2020 0 Yazar: Ahmet Güler

Merhaba, bir önceki yazımızda Unity‘de joystick mekaniği yapmıştık.Bu dersimizde ise, Unity ile bayrak yapımı bakacağız.Tabi bu bayrağı projemize ekleyip bırakmayacağız.Burada işin içine, Cloth bileşeni giriyor.Bu bileşen kısaca, kumaşı simule ediyor.Yani projenizde perde, bayrak, bez gibi kullandığınız nesneler varsa, işte Cloth sistemi ile bu nesneleri aynı bir kumaş gibi simule edebiliyorsunuz.Lafı uzatmadan yeni bir proje oluşturalım ve dersimize başlayalım.

Sahnemizi oluşturmaya başlayalım.

Öncelikle bu projede kullanacağımız senaryoya bir bakalım.Yazımın başlığından da anladığınız gibi, bu projede bayrak yapacağız.Yanlız projemizin boş olmaması için, daha sonradan bu bayrağı değiştirip yelken yapmaya kadar verdim.Yani bir teknenin yelkenini simule edeceğiz.Artık başlayabiliriz.İlk olarak sahnemize bir Plane nesnesi oluşturuyoruz.Bu nesne bizim denizimiz olacak.Daha sonra internetten bulduğumuz bir tekne modelini projemize dahil ediyoruz.Ben kullanacağım modelin yelkenlerini sildim.

Çünkü Unity‘de bulunan hazır nesnelerden yeniden oluşturacağım.Şimdi yelkenimizi oluşturmaya başlayalım.İlk olarak bir Plane nesnesi daha ekliyoruz.Bu nesne yelkenimizin oluşturacak.Daha sonra Inspector penceresinden bu nesnenin Transform bileşeni hariç, tüm bileşenlerini siliyoruz.Daha sonra “Add Component” butonuna basıyoruz ve arama yerine Cloth yazarak, bileşenimizi Plane nesnemize ekliyoruz.Bu bileşen ile birlikte Skinned Mesh Renderer bileşeni de ekleniyor.Bu bileşenimizin Mesh bölümüne Plane nesnemizi ekliyoruz.Sahnemiz şuan bu şekilde görünüyor.

Unity-Bayrak-Yapımı-Cloth Sistemi-clothing system-tutorial

Daha sonra, Cloth bileşeninde bulunan “Edit Constraints” butonuna basıyoruz.Burada yelkenimizin hangi köşelerinden asılacağını belirleyeceğiz.Scene penceresinde açılan araçta Max Distance seçili iken, fare yardımı ile yelkenimizi tutturacağımız köşeleri işaretliyoruz.Ben modelimin hem alt hemde üst noktasından yelkenimi işaretliyorum.Siz kendi modelinize göre farklı noktalardan işaretleyebilirsiniz.Yelkenimizin bağlantı noktalarını belirledik.

Unity-Bayrak-Yapımı-Cloth Sistemi-clothing system-tutorial

Şimdi dalgalanma sırasında, yelken direklerinin içerisinden geçmemesi için bir ayar yapacağız.Cloth bileşeni iki tür collider kabul ediyor.Bunlardan bir tanesi, Capsule diğeri ise Sphere nesneleri için.Ben direkler için, Capsule Collider bileşenini kullandım.Bu modelde iki direk olduğu için, her iki direğin collider bileşenini Cloth sistemimizde bulunan, “Capsule Colliders” bölümüne ekliyoruz.

Eğer nesnemizin collider bileşeni Sphere Collider ise bu sefer, “Sphere Colliders” bölümüne ekliyoruz.Artık yelkenimiz dalgalanma sırasında, direk nesnelerimizin içerisinden geçmeyecektir.Şimdi yelkenimiz için bir kaplama ekleyelim.Artık sahnemiz hazır durma geldi.Son hali bu şekildedir.

Unity-Bayrak-Yapımı-Cloth Sistemi-clothing system-tutorial

Kodlarımızı yazmaya başlayalım.

Aslında bu bileşen için herhangi bir kod yazmaya gerek yok.Ancak bu projede bir yelkenli simule edeceğimiz için kendi kendine dalgalanacak bir mekanik yapmamız gerekiyor.Bunu Cloth bileşeninin External Acceleration özelliği ile sağlayacağız.Bu özelik ile yelkenimize x, y ve z ekseninde farklı hızlar uygulayabileceğiz.Bunun için yeni bir C# Script oluşturuyoruz.Şimdi bu script dosyamızı editör ile açalım ve kod yazmaya başlayalım.

public Cloth Yelken;
public Vector3 Rastgele;

İlk olarak değişkenlerimizi oluşturmakla başlıyoruz.İlk satırda, Cloth bileşenine erişmek için bir değişken tanımlıyoruz.İkinci satırda ise, yeni bir Vector3 değişkeni oluşturuyoruz.Bu değişken ile, yeni koordinatlar oluşturacağız.

Yelken = GameObject.FindWithTag("yelken").GetComponent<Cloth> ();

Şimdi start() fonksiyonunun içerisine bu kodu yazıyoruz.Değişkenimizi, etiketi “yelken” olan nesnenin Cloth bileşenine eşitliyoruz.Artık bu bileşenin özelliklerine erişebileceğiz.

IEnumerator Ruzgar() {
   while (true) {
      Rastgele = new Vector3 (Random.Range (-30, 30), Random.Range (-30, 30), Random.Range (-30, 30));
      yield return new WaitForSeconds (2);
      Yelken.externalAcceleration = Rastgele;
   }
}

Yeni bir fonksiyon oluşturuyoruz.Farklı eksenlerde ve belirli aralıklarda dalgalanmayı sağlamak için, IEnumerator metodundan yararlanacağız.İkinci satırda bir while döngüsü oluşturuyoruz.Koşul olarak true belirliyoruz.Yani yelkenimizin dalgalanması hiç bitmeyecek.Üçüncü satırda, değişkenimize yeni bir Vector3 değerine eşitliyoruz.

Burada rastgele bir dalgalanma oluşturmak için, Random fonksiyonundan yararlanıyoruz.Bunun için x, y ve z eksenlerinde “-30” ile “30” arasında rastgele bir değer belirliyoruz.Dördüncü satırda ise, her karede WaitForSeconds fonksiyonu ile belirlediğimiz bir süre bekliyoruz.Beşinci satırda ise rastgele belirlediğimiz yeni değerleri yelkenimizin externalAcceleration özelliğinde ki eksenlere eşitliyoruz.

StartCoroutine (Ruzgar());

Şimdi bu fonksiyonu çalıştırmamız gerekiyor.Bunun için bu kodu, start() fonksiyonunun içerisine yazıyoruz.Yazdığımız bu fonksiyonun çalışması için, Coroutine fonksiyonlarından yararlanmamız gerekiyor.Burada da bu işlemi gerçekleştiriyoruz.Evet script dosyamızı tamamladık.

Evet projemizin sonuna geldik.Son olarak, Project penceresinde bulunan script dosyamızı sürükleyerek, yelken nesnemizin üzerine bırakıyoruz.Artık test edebiliriz.Bu projede Cloth bileşeninin bazı özelliklerinden yararlandık.Projenize göre bu özellikler ile oynayarak daha dinamik nesneler oluşturabilirsiniz.Evet bir sonraki yazıda görüşmek üzere…

Unity-Bayrak-Yapımı-Cloth Sistemi-clothing system-tutorial