Unity

Unity Programında Trigonometrik Fonksiyonları Kullanarak Dairesel Animasyonlar Oluşturma

Oyunlar ve animasyonlar için vazgeçilmez olan derslerden biri ve en önemlisi Matematik ve bunun altında yer alan Trigonometrik fonksiyonlardır. Trigonometri açılar yardımıyla oluşturulan Sin, Cos fonksiyonlarıdır. Bu fonksiyonları anlayabilmek için birim çemberde fonksiyonların oluşturulmasını ve değerlerin elde edilmesini bilmemiz gerekir.

Unity Hub programını açalım.

İsmi DaireselHareket olan 3D bir yeni proje oluşturalım.

Sahneye boş bir nesne ekleyelim. Bu nesnenin içine 1 adet Sphere ekleyelim.

Assets altında Scripts isminde bir klasör oluşturalım.

Bu klasör altında hareket isminde bir script dosyası oluşturalım.

Oluşturulan bu dosyayı Sphere nesnesine ekleyelim.

Script dosyasına aşağıdaki kodları yazalım.

float aci = 0;

[SerializeField]
float acisalHiz = 90;
void Start()
{

}

void Update()
{
    aci += acisalHiz * Time.deltaTime;
    Vector3 pos = Vector3.zero;

    pos.x = Mathf.Cos(aci * Mathf.Deg2Rad);

    transform.localPosition = pos;
}

Projeyi çalıştıralım. Çemberin +1, -1 yönünde x ekseninde hareket ettiğini görürsünüz. Şimdi Sin fonksiyonunu kullanarak y ekseni üzerinde hareket ettirelim.

pos.y = Mathf.Sin(aci * Mathf.Deg2Rad);

Projeyi çalıştralım. Çemberin + yönde hareket ettiğini görürsünüz. Oluşturulan animasyonun görsel bir yapı oluşturması için Trail Renderer kullanalım. Bu component nesnenin geçtiği yerlerde gölge efekti oluşturmasını sağlar. 

Öncelikle bu componenti sphere nesnesine ekleyelim. Daha sonra Width kısmında zaman geçtikçe gölge efektinin azalmasını sağlayalım. Time özelliğiyle sahnede görünme aralığını belirleyelim. Ben 3 olarak belirledim. Şimdi rengini ayarlayalım. Başlangıç rengini 110D46, bitiş rengini F64747 yapalım. Bitişte alfa değerini 100 yapalım. Materials değerini ise Default- Line olarak belirleyelim. 

Projeyi kaydedip çalıştıralım. Gölge efekti 0. konumdan itibaren oluştuğu için başlangıçta gölge efekti hatalı gerçekleşmektedir. Şimdi bunu düzeltelim.

Öncelikle Trail Renderer componentinin başlangıçta pasif yapalım. Bu işlemleri kodla gerçekleştireceğiz.

float aci = 0;

[SerializeField]
float acisalHiz = 90;

private new TrailRenderer renderer;
void Start()
{
    HareketEttir();
    renderer = GetComponent<TrailRenderer>();
    renderer.enabled = true;
}

void Update()
{
    aci += acisalHiz * Time.deltaTime;
    HareketEttir();
}

void HareketEttir()
{
    Vector3 pos = Vector3.zero;

    pos.x = Mathf.Cos(aci * Mathf.Deg2Rad);
    pos.y = Mathf.Sin(aci * Mathf.Deg2Rad);

    transform.localPosition = pos;
}

Projeyi çalıştıralım. Gölge efektinin hatasız bir şekilde oluştuğunu görürsünüz. Oluşturulan dairenin yarıçapını dişarıdan değiştirmek için yaricap isminde bir değişken oluşturalım.

[SerializeField]
float yaricap = 2.5f;

Oluşturduğumuz bu yarıçapı pos isimli vektörle çarptığımızda dairenin yarıçapının değiştiğini görürsünüz.

transform.localPosition = pos * yaricap;

Projeyi çalıştıralım. Dairenin yarıçapının büyüdüğünü görürsünüz. Dışarıdan bu değeri değiştirerek animasyona etkisini görebilirsiniz.

Sahnemize yeni bir Sphere daha ekleyelim. Projeyi çalıştırdığımızda her iki şekilde aynı yerden başlayacağı için bir şey anlaşılmayacaktır. Şimdi aciFarki isminde dışarıdan değiştireceğimiz bir değişken oluşturalım.

[SerializeField]
float aciFarki = 0;

Bu değişkenin değerini aci değişkeniyle toplayıp Sin ve Cos fonksiyonuyla çarpalım.

void HareketEttir()
{
    Vector3 pos = Vector3.zero;

    pos.x = Mathf.Cos((aci + aciFarki) * Mathf.Deg2Rad);
    pos.y = Mathf.Sin((aci + aciFarki) * Mathf.Deg2Rad);

    transform.localPosition = pos * yaricap;
}

Projeyi çalıştıralım. aciFarki değişkeninin değerini 180 yapalım. İki çemberin arka arkaya hareket ettiğini görürsünüz. Animasyonun aynı noktada hareketi yerine ileri yönlü hareketini sağlayalım. Bunun için yon isminde bir script dosyası oluşturalım. Bu dosyayı boş olarak tanımladığımız GameObject nesnesine ekleyelim. Script dosyasının içeriği aşağıdaki gibi olacaktır.

[SerializeField]
float hiz = 5f;

void Update()
{
    transform.position += Vector3.forward * hiz * Time.deltaTime;
}

Projeyi çalıştıralım. Animasyonun hareketini görebilirsiniz. Hareketin daha sıhhatli bir şekilde takibi için Scene ekranına geçelim. Burada nesnelerin takibi için Ctrl + S kısayol tuşuna basalım. Animasyonun ileri yönlü hareketini görebilirsiniz. Son olarak şekillerin x ekseninde daha geniş bir daire çizmesini sağlayalım. Bir bakıma elips hareketi oluşturabiliriz. Bunun için HareketEttir fonksiyonunda pos.x ve pos.y değerlerinde değişiklik yapabilirsiniz. Ben aşağıdaki gibi bir değişiklik yapıyorum.

pos.x = Mathf.Cos((aci + aciFarki) * Mathf.Deg2Rad)* 3f;

Animasyonun elips hareketi yaptığını görürsünüz. Bundan sonraki adımlar hayal gücünüze bağlı. İstediğiniz animasyonu oluşturabilirsiniz.


İlgili Makaleler
Bilgisayarlı Tasarım Uygulamaları Dersi İkinci Dönem Birinci Yazılı Çalışma Soruları
Unity Programında Button Yardımıyla Sahneler Arasında Geçiş Yapma İşlemleri
Unity Programında Mouse Hareketlerine Göre Kamera Açısını Ayarlama
Unity Programında Sprite İle 2D Animasyon Yapmak
Unity Programında Bir Nesneyi Kodlarla Döndürme İşlemi
Bilgisayarlı Tasarım Uygulamaları Dersi İkinci Dönem İkinci Yazılı Çalışma Soruları
Unity Programında Material Kullanımı
Unity Programında Puzzle Oyunu Nasıl Yapılır
Unity Programında Input Get Axis Komutu
Unity Programında Basit Login Yapımı
Unity Programında Prefabs Nesnelerini Kodla Çoğaltma
Unity Programında Kodlarla Sahneye Nesne Ekleme
Unity Projesinde Sql Server Veri Tabanına Bağlanma
İki Sayıyı Toplayan İşlemi Unity Programında Kodlayarak Yapınız
Unity Programında Input GetKey Komutu
Unity Programında Topu Hareket Ettirme Oyunu Kamera Takibini Gerçekleştiriyoruz
Terrain Nedir? Ne İşe Yarar?
Unity Programında Script Editörünü Ayarlama
Unity Programında Topu Hareket Ettirme Oyunu Oyuna Yeniden Başlama Butonunu Kodlayıp Bitiriyoruz
Unity Programında Inspector Ve Console Paneli

Yorum Ekle
   
Kötü İyi