Unity Nesne Etrafında Dönmek (RotateAround)

Unity Nesne Etrafında Dönmek (RotateAround)

20 Ocak 2020 0 Yazar: Ahmet Güler

Merhaba, bir önceki yazımızda Unity’de ayna yapımını öğrenmiştik.Böylelikle istediğimiz yüzeylere görüntü yansıtabiliyorduk.Bu dersimizde ise, bir nesnenin başka bir nesne etrafında nasıl döneceğini öğreneceğiz.Unity kütüphanesinde bunu sağlamak için bir fonksiyon bulunuyor.Fonksiyonumuzun adı RotateAround.Bu fonksiyonu kullanarak hedef bir nesnenin etrafında diğer nesne yada nesneleri döndürebiliyoruz.Projelerinizde bu fonksiyonu farklı biçimlerde kullanmanız mümkün.Evet şimdi yeni bir proje oluşturalım ve dersimize başlayalım.

Sahneye gerekli nesnelerimizi yerleştirelim.

Öncelikle bu projemizde kullanacağımız senaryoyu açıklayayım.Bir hedef nesnemiz olacak.Ve bu hedef nesne etrafında diğer nesnelerimiz farklı eksenlerde dönüşünü sağlayacak.Gayet basit bir senaryo oluşturdum.Bunu farklı şekillerde geliştirmek mümkündür.Limitleri sizin hayal gücünüz belirleyecektir.Şimdi Hierarchy penceresinde sağ tıklayarak sırasıyla, 3D Object > Sphere seçimini yapıyoruz.Bu küre nesnemizden iki kopya daha oluşturuyoruz.

Daha sonra Scene penceresinde pozisyonlarını ayarlamak için, aracımızı seçiyoruz.Bu araca erişmek için, klavyede kısayol olarak “W” tuşu yada Scene penceresinin hemen üstünde yer alan araç çubuğundan erişebilmeniz mümkündür.İstediğimiz gibi konumlandırdıktan sonra material dosyaları oluşturuyoruz.Project panelinde sağ tıklayarak sırasıyla, Create > Material seçimini yapıyoruz.Ben iki adet material dosyası oluşturmayı uygun gördüm.

Bunlardan birini hedefi oluşturacak sphere nesnemin üzerine sürükleyip bırakıyorum.Diğerini ise, bu hedef etrafında dönecek sphere nesnelerimin üzerine sürükleyip bırakıyorum.Daha sonra sırasıyla material dosyalarımı seçiyorum ve sağ taraftaki Inspector penceresinde renk paletini seçiyorum ve istediğim bir rengi veriyorum. Artık sahnemiz hazır duruma geldi.Aşağıdaki resimden sahnenin son halini görebilirsiniz.

unity_nesne_ertafinda_donmek_rotatearound

Bize gereken kodlar nelerdir?

Evet sahnemiz için gerekli nesnelerimizi oluşturduk.Şimdi kod yazma etabına gelelim.Öncelikle Project penceresinden yeni bir C# Script dosyası oluşturuyoruz.Bunu yapmak için, Project penceresinde sağ tıklayarak sırasıyla, Create > C# Script seçimini yapıyoruz.Daha sonra bu dosyamıza bir ad verelim ve editörümüzde açalım.Öncelikle değişkenlerimizi tanımlamakla başlıyoruz.

public Transform hedef;
public GameObject[] kupler;
public float hiz;

Bu proje için oluşturduğum değişkenlerimiz bu şekildedir.İlk satırda hedefimiz pozisyonunu almak için bir Transform değişkeni oluşturuyorum.Daha sonra bir Gameobject listesi oluşturuyorum.Birden fazla nesne kullanacağımız için, bu şekilde bir listeye ihtiyaç duyuyoruz.Gameobject  sonuna koyduğumuz “[]” köşeli parantezler ile bu değişkenimizin bir liste görevi göreceğini söylemiş olduk.

Bunu farklı biçimlerde de tanımlamak mümkündür.Başka bir yazıda nasıl farklı kullanacağımızı anlatacağım.Üçüncü satıra baktığımızda ise, float türünde bir değişken oluşturuyorum.Bu değişken ile dinamik bir biçimde dönecek nesnelerimizin hızlarını belirleyebileceğiz.

kupler[0].transform.RotateAround (hedef.transform.position, hedef.transform.up, hiz * Time.deltaTime);
kupler[1].transform.RotateAround (hedef.transform.position, hedef.transform.right, hiz * Time.deltaTime);

Evet şimdi update() fonksiyonumuzun içine asıl bize gerekli kodlarımızı yazalım.Az önce bir liste oluşturmuştuk.Bu listedeki elemanları kullanmak için index değerlerini çekiyoruz.Bu index değerlerini bir döngü ile de çekebilirdik fakat bu projede gerek olmadığı için direk çekmeyi tercih ettim.

Bu liste bir GameObject listesi olduğu içinde, direk kullanabiliyoruz.Örneğin string türünde bir liste olsaydı.Kullanım şekli “GameObject.Find(“0”)” şeklinde olacaktı.Çünkü index değeri olarak sadece nesnemizin ismini tutacaktık.O yüzden de, Find fonksiyonunda önce bu nesneyi bulmamız gerekecekti.Kodlarımıza geri gelecek olursak, burada asıl işi yapacak olan RotateAround fonksiyonudur.

Parantez içinde aldığı parametrelere bakacak olursak, ilk olarak hedef nesnemizin pozisyon değerlerini alıyoruz.Daha sonra bu hedefin hangi koordinatında hareket edeceğimizi belirliyoruz.Son olarak hareket hızını belirliyoruz ve Time.deltaTime fonksiyonu ile hızımızı çarpıyoruz.Bu fonksiyon ile çarpmak bize, her karede aynı ölçüde hareket imkanı sağlıyor.

Son olarak script dosyamızı kameramızın üzerinine sürükleyip bırakıyoruz.Daha sonra tanımladığımız değişkenleri dolduruyoruz.Artık projemiz çalışmaya hazır.Evet bu dersimizin de sonuna gelmiş bulunmaktayız.Bir sonraki yazıda görüşmek üzere…

unity_nesne_ertafinda_donmek_rotatearound