Sayfalar

Translate Blog

unity etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
unity etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2 Aralık 2022 Cuma

Unity Materyal ve Materyal Menüsünde bulunan rengin değiştirilmesi, Change Unity Material and Shader Color

Bir gameObjectin SkinnedMeshRenderer kısmında bulunan materyal dokusunu ve rengini aşağıdaki şekilde değiştirebilirsiniz.


Renk değiştirmek için;

RGB renkler 255,255,255 olarak tanımlanır. Kırmızı isterseniz 255,0,0 yapıp kırmızıyı maksimum yaparsınız. Ama Unity'de renk atamalarında 255 olan değerin kaşılığı 0 ile 1 arasında mesela 255 için 1f (f float anlamına geliyor) veya 127 için 0.5f dir. 

yourGameObject.GetComponent<SkinnedMeshRenderer>().material.color = new Color(0.1f,1f,0);



Elinizdeki RGB kod aracılığı ile dinamik değer oluşturmanız gerekiyorsa oran orantı metodu ile elde edeceğiniz 1/255 değerini RGB kodunuzdaki R ile G ile ve B ile ayrı ayrı çarparak kullanın.

using System.Globalization; //en tepeye eklemeyi unutmayın, küsüratlı float sayı dönüştürmede lazım

string rgb = "255,0,0"; //kırmızı renginizin rgb si olsun # siz

var katsayi = 1/255; //dönüştürme oranımız

string[] renk= rgb.Split(char.Parse(",")); //virgülle parçalara ayırıyoruz, her sayıyı ayrı hesaplamamız lazım.

var newcolor = new Color(float.Parse(renk[0]*katsayi, CultureInfo.InvariantCulture), float.Parse(renk[1]*katsayi,, CultureInfo.InvariantCulture ), float.Parse(renk[2]*katsayi,, CultureInfo.InvariantCulture ));

yourGameObject.GetComponent<SkinnedMeshRenderer>().materials[0].color = newcolor;


Materyal değiştirmek için;

public Material[] NumMat;

//bu diziyi oluşturun ve arayüzden bu diziye kullanmak istediğiniz materyalleri atayın, bir amteryal dizisi olduğu için sadece materyal atayabilirsiniz, resim olmaz. Resimleri önce materyalde kullanın sonra materyali atayın. 1 tane ise 1 tane 10 tane ise 10 tane materyali bu dizi alanına ekleyin. Resimdeki gibi.


Değişikliği yapacak bir fonksiyon yazın ve aşağıdaki kodu için koyun.

var materials = yourGameObject.GetComponentInChildren<SkinnedMeshRenderer>().materials;

materials[0] = NumMat[3];   //burda 3. materyali doku olarak atamışım    

yourGameObject.GetComponent<SkinnedMeshRenderer>().materials = materials;



8 Ekim 2019 Salı

Unity inspector Penceresindeki Bir Özelliğe Erişmek / Change A value on Inspector With C# on UNITY

Unity inspector penceresindeki bir özelliği algoritmik olarak değiştirmek mi istiyorsunuz. C# ile kodlarken ilgili pencereye erişmenin en güzel ve performanslı yolunu aşağıda bulabilirsiniz.

Örnek olarak bir kutumuz olsun ve dokusunu değiştirmek isteyelim. Normalde dokuyu inspector penceresinde Default Materyal başlığına tıklayarak yapabiliriz. Peki bu işlemi komutla nasıl yapabiliriz?



Unity versiyonum 2019.2 bu arada. Versiyonlar çoğu konuda önemli olabiliyor. Çizim nesnelerinde Mesh Renderer özelliği hep vardır. Siz nesnenin üzerine oluşturduğunuz bir materyali bile atasanız elle okun ucundaki bölgeden değişiklik yapabilirsiniz, fakat kod ile Renderer'ın özelliği olan materyale erişerek yapmalısınız.

Kutumuza bir script ekleyelim ve kod düzenleyicimiz her ne ise onda açalım. Visual Studio kullanmanızı ve Unity kurulumu yapılırken kendisinin kurmasına izin vermenizi öneririm. Kendiniz kurduğunuzda sorun çıkabiliyor. Bu haliyle Unity kodları Visual Studio'da çok güzel gözükebiliyor.


Fare tıklaması için farklı seçenekleriniz var. mousedown, mouseup, over, exit,... şeklinde çeşitli OnMouse varyasyonları var. Bir farenin basıldığı anı kullandık bu yüzden onMouseDown listenerını açarak kodu onun içine yazdık. Bu sayede ne zaman bu nesnenin üzerine bir tıklama gelirse içindeki kodlar çalışacaktır.


"this.gameObject.GetComponent<>" betiği buradaki tüm can alıcı işleri yapmanızı sağlayacak en önemli kod diyebiliriz. Bu kod ile inspector penceresindeki her şeye erişebilirsiniz.

Şöyle düşünün Inspector penceresi tüm özelliklerin bir listesidir, siz bu elemanlara GetComponent<> komutunun okları arasında bu listedeki tüm elemanların ismini yazarak erişebilirsiniz.
this.gameObject.GetComponent<Rigidbody>
this.gameObject.GetComponent<Collider>
this.gameObject.GetComponent<Transform>
gibi komutlarla özelliklere erişip değiştirebilirsiniz.