Unity LineRenderer Kullanımı


Herkese merhabalar bugün sizlerle birlikte LineRenderer kullanımı üzerinde çalışacağız. LineRenderer, Unity'de çizgi çizmek için kullanılan bir sistemdir. Tüm çizim uygulamalarında kullanılacağı gibi, yol,dalga ve eğri çiziminde de kullanılabilir. LineRenderer kullanımı oldukça basittir.

Öncelikle çizimde kullanacağımız materiali hazırlayıp LineRenderer componenti içine atalım. Kullancağımız material için shader olarak Unlit/Color seçiyoruz.


Daha sonra yarattığımız materiali LineRenderer componenti içindeki material bölümüne atıyoruz.


Burada positions diye bir array var. Bu arrayin size değerine yaratacağımız line'ın köşe sayısını giriyoruz. Köşe sayısından kasıt düz bir çizgide köşe sayısı 2'dir. Üçgen'de 3, dörtgende 4'tür. Öncelikle bir üçgen çizelim bu değeri 3 yapalım.


Size değerini 3 yaptıktan sonra 1.köşe yani 0.indisteki pozisyonun x değerini koordinat düzleminin x eksenindeki -5 noktası olarak ayarlayalım. Daha sonra 2.köşe yani 1.indisteki pozisyonun y değerini koordinat düzleminin y eksenindeki 5 noktası olarak ayarlayalım. Son olarak 3.köşe yani 2.indisteki pozisyonun x değerini koordinat düzleminin x eksenindeki 5 noktası olarak ayarlayalım.Sonuç olarak elde edeceğimiz görsel aşağıdaki gibi olmalıdır.


Şimdi de bu üçgeni tamamlayalım. Bu işi kod yazarak halledebileceğimiz gibi inspector panelinden birtakım değerleri değiştirerek de gerçekleştirebiliriz. Ama biz bu işlemi kod yazarak yapalım.


LineRenderer lr;
    public Vector3[] noktalar;
    void Start()
    {
        lr = GetComponent<LineRenderer>();
        UcgenCiz(noktalar, 0.05f, 0.05f);
    }
    void UcgenCiz(Vector3[] positions,float baslangicGenisligi,float bitisGenisligi)
    {
        lr.startWidth = baslangicGenisligi;
        lr.endWidth = bitisGenisligi;
        lr.loop = true;
        lr.positionCount = 3;
        lr.SetPositions(positions);
    }

Kodlarımızı yazdıktan sonra scriptimizi LineRenderer componentinin olduğu bir nesneye atalım. Daha sonra noktalara değer olarak aşağıdaki değerleri girelim.


Sonuç olarak aşağıdaki görseli elde edeceğiz.


Dikkat ettiyseniz ilk çizdiğimiz üçgende üçgen birleşmemişti ama bunda birleşik,bunun sebebi loop değerinin false olması idi loop değerini true yaptığımız için üçgenin son noktası ile ilk noktası birleşiyor ve sonuç olarak böyle bir görüntü elde ediyoruz.

Şimdi de bilgisayar bilimlerinde grafik çiziminde sıkça kullanılan bezier eğrilerinin çizimini göreceğiz. Bezier ismi bu hesaplama yöntemini bulan Fransız matermatikçiden gelmektedir.

Bezier eğrileri hakkında daha detaylı bilgi almak için Şadi Evren Şeker hocamızın blogunu ziyaret edebilirsiniz.
Gelelim bezier eğrilerinin çiziminde kullanacağımız denkleme, bu denklem bezier eğrisinde referans noktası olarak kullanacağımız nokta sayısı kadar parametre almaktadır. Aşağıdaki örnekte 3 noktalı ve 2 noktalı bezier eğrisinin formüllerini inceleyebilirsiniz.
Formüller dikkatli incelendiği  zaman Pi değerlerinin referans noktalarının pozisyonları olduğunu anlamışsınızdır. Şimdi gelelim kodlarımıza.


LineRenderer lr;
    public Transform[] noktalar;
    void Start()
    {
        lr = GetComponent<LineRenderer>();
    }
    void Update()
    {
        BezierEgrisi(noktalar[0].position, noktalar[1].position, noktalar[2].position);
    }
    void BezierEgrisi(Vector3 p1, Vector3 p2,Vector3 p3)
    {
        lr.startWidth = 1f;
        lr.endWidth = 1f;
        lr.positionCount = 100;
        float t = 0f;
        Vector3 bezier = new Vector3(0, 0, 0);
        for(int i = 0; i < lr.positionCount; i++)
        {
            bezier = (1 - t) * (1 - t) * p1 + 2 * (1 - t) * t * p2 + (t * t * p3);
            lr.SetPosition(i, bezier);
            t += (1 / (float)lr.positionCount);
        }
    }

Umarım yazımı beğenirsiniz. Bir sonraki yazıda görüşmek üzere.

Yorumlar