Sayfalar

Translate Blog

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;