
Unity’de Hareketli Arkaplan Yapımı
Merhaba bir önceki yazımda, Unity‘de nesnemizi fare ile hareket ettirmiştik.Bunu yapmak için, MoveTowards ve LookAt gibi fonksiyonlardan yararlanmıştık.Bugünkü yazımızda, hareketli arkaplan yapmayı öğreneceğiz.Yeni bir proje oluşturalım ve hemen dersimize başlayalım.
Sahnemizin hazırlanması.
Öncelikle bu projemizde kullanacağımız senaryoya bir bakalım.Hareketli arkaplanlar oluşturacağımız için en uygun senaryo, bir disko ortamı olur diye düşündüm.Burada kullanacağımız kaplamaları internetten araştırabilir ve istediğimiz bir kaplamayı seçebilirsiniz.Ben iki farklı kaplama seçtim.Bir tanesi duvarları oluşturacak nesnemiz için, diğerinide zemini oluşturacak nesnemiz için kullanacağım.Tabi bunları kullanmadan önce ufak bir photoshop işleminden geçirmemiz gerekiyor.Kaplamamızı photoshop ile açıyoruz.
Daha sonra klavyeden ctrl+u kısayolu ile tonlama aracımızı açıyoruz.Buradan yapacağımız farklı ayarlar ile, kaplamamızın tonunu değiştirebilirsiniz.Ben üç farklı ton kullandım.Şimdi Unity‘e geri dönebiliriz.İlk olarak bir Plane nesnesi oluşturuyoruz.Daha sonra üç adet Cube nesnesi oluşturuyoruz.Bunları Scene penceresinden istediğimiz ölçülerde ayarladıktan sonra bir oda haline getiriyoruz.Daha sonra bir Sphere nesnesi oluşturuyoruz.Bu küre nesnesi bizim disko topumuzu oluşturacak.
Bu nesnemizi de istediğimiz gibi ayarladıktan sonra, sahnemiz hazır hale geliyor.Tabi duvarlara, zemine ve disko topuna ilk kaplamalarını veriyoruz.Bunları birazdan dinamik olarak değiştireceğiz.Ben sahnemin biraz daha diskoyu andırması için ekstra olarak farklı renklerde spot ışıkları da kullandım.Bunu kullanmanız şart değil.Zira yazacağımız kodlar ile bir ilgileri yok.Sahnemizin son hali bu şekildedir.
Kodları yazmaya başlayalım.
Öncelikle iki tane script dosyası kullanacağız.Bunlardan biri hareketli arkaplanları kontrol etmek için olacak.Diğerini ise, disko topumuza dönme animasyonu vermek için kullanacağız.Şimdi iki adet C# Script dosyası oluşturalım ve ilk script dosyamızı editör ile açarak kod yazmaya başlayalım.
private Renderer Nesne; public List<Texture2D> Arkaplanlar = new List<Texture2D>(); public bool ArkaplanDegissinMi; public float DegismeHizi;
İlk olarak hareketli arkaplan yapmak için, bize gereken değişkenlerimizi oluşturmakla başlıyoruz.İlk satırda, bir Renderer değişkeni oluşturuyoruz.Bu değişken ile nesnemizin material bölümüne erişebileceğiz.İkinci satırda, yeni bir liste oluşturuyoruz.Bu listeyi Texture2D olarak belirliyoruz.Çünkü arkaplan resimlerimiz bu listeye eklenecek.Üçüncü satırda, bool türünde bir değişken oluşturuyoruz.Bu değişken ile hareketli arkaplanımızın değişmesini kontrol edeceğiz.Son satırda ise float türünde bir değişken oluşturuyoruz.Bu değişken ile de, hareketli arkaplanın değişme hızını kontrol edeceğiz.
Nesne = GetComponent<Renderer> (); ArkaplanDegissinMi = true; DegismeHizi = 0.5f;
Şimdi start() fonksiyonunun içerisine bu kodları yazıyoruz.İlk satırda değişkenimize, nesnenin Renderer bileşenini eşitliyoruz.İkinci satırda, bool değişkenimize true değerini veriyoruz.Son satırda ise, arkaplanımızın değişme hızını daha doğrusu süresini ayarlıyoruz.
void KaplamayiDegistir() { Nesne.material.SetTexture ("_MainTex", Arkaplanlar[Random.Range (0, Arkaplanlar.Count)]); }
Şimdi yeni bir fonksiyon oluşturuyoruz.Bu fonksiyon ile arkaplanı kontrol edeceğiz.İkinci satırda, _MainTex değeri önemli.Çünkü nesnemizin albedo bölümünü kontrol ediyor.Bizde buraya erişmeye çalıştığımız için, _MainTex yazıyoruz.Diğer bölümlerin isimlerini öğrenmek isterseniz, nesneye verdiğimiz kaplamanın sağında bulunan ok simgesine basarak buradan “Edit Shader..” seçimini yapınız.
Inspector penceresinde neyin ne işe yaradığını gösteren bir pencere açılacaktır.Parantez içerisindeki ikinci parametreye bakacak olursak, Random fonksiyonunu görüyoruz.Bu fonksiyonu diğer yazılarımda da kullanmıştık.Yine burada da, oluşturmuş olduğumuz listeden rastgele bir index numarası almak için kullanıyoruz.Listemizin kaç elemandan oluştuğunu ise, Count fonksiyonu ile buluyoruz.
IEnumerator ArkaplaninDegismeZamani() { ArkaplanDegissinMi = false; yield return new WaitForSeconds (DegismeHizi); ArkaplanDegissinMi = true; }
Daha sonra yeni bir fonksiyon daha oluşturuyoruz.Bu sefer fonksiyonumuzda, IEnumerator metodunu kullanıyoruz.Bu metodun nasıl kullanılacağını önceki yazılarımda değinmiştim.İkinci satırda, bool türündeki değişkenimizin değerini false yazıyoruz.Üçüncü satırda WaitForSeconds fonksiyonunu kullanarak, belirlediğimiz süre dahilinde bool değişkenimizin değerini değiştiriyoruz.Son satırda ise süre bittiğinde, bool değişkenimiz true değerini alıyor.Böylelikle sürekli bir döngü haline giriyorlar.
if (ArkaplanDegissinMi) { StartCoroutine (ArkaplaninDegismeZamani()); KaplamayiDegistir(); }
Evet şimdi update() fonksiyonunun içerisine bu kodları yazıyoruz.Burada yeni bir koşul oluşturuyoruz.Eğer bool değişkenimizin değeri true ise, koşulumuz doğru oluyor ve içerisindeki kodları çalıştırıyor.İkinci satırda, StartCoroutine fonksiyonunu kullanarak az önce IEnumerator metodu ile yazdığımız fonksiyonu çalıştırıyoruz.Bu şekilde bool değişkenimizin değeri sürekli değişiyor ve arkaplanımızın değişme hızını ayarlayabiliyoruz.Üçüncü satırda ise, hareketli arkaplanımızı yapmak için oluşturduğumuz fonksiyonu çalıştırıyoruz.Böylelikle nesnemize rastgele kaplamalar atıyoruz.Evet script dosyamızı hazırlamış bulunmaktayız.
Disko topu animasyonu.
Şimdi ikinci script dosyamızı editör ile açalım.İlk olarak bir değişken oluşturuyoruz.Bu değişken ile disko topumuzun dönüş hızını ayarlayabileceğiz.
public float DonusHizi;
Daha sonra projemizi başlattığımız zaman yeni bir değer alması için start() fonksiyonunun içerisine bu kodu yazıyoruz.
DonusHizi = 0.5f;
Son olarak da animasyonumuzu oluşturmak için, update() fonksiyonunun içerisine bu kodu yazıyoruz.
transform.Rotate (0, 90f * DonusHizi * Time.deltaTime, 0);
Burada kullanmış olduğumuz, Rotate fonksiyonu ile nesnemizi istediğimiz eksende döndürebiliyoruz.Biz y ekseninde bir dönüş elde edeceğimiz için, diğer iki eksenin değerini sıfır “0” olarak belirledik.Y ekseninde ise 90 derecelik bir dönüş açısını, oluşturduğumuz değişken ile çarpıyoruz ve her karede aynı hızda hareket etmesi içinse Time.deltaTime fonksiyonu ile tekrar çarpıyoruz.Artık sürekli dönen bir nesnemiz oldu.Bu script dosyamız da artık hazır duruma geldi.
Evet yazmış olduğumuz ilk script dosyasını, kaplamalarının değişmesini istediğimiz nesnelere veriyoruz.Daha sonra script bileşeni üzerinde bulunan liste bölümüne, kullanacağımız kaplamaları sürükleyip bırakıyoruz.Daha sonra ikinci script dosyasını da, disko topunu oluşturan nesnemizin üzerine bırakıyoruz.Evet artık projemiz hazır.Bir sonraki yazıda görüşmek üzere…