SpriteRenderer Color ile Renk Değiştirme Sorunu/Çözümü

in #tr3 years ago (edited)


Diyelim ki şu mantıkta bir kodunuz var:

SpriteRenderer sr;
Color yeniRenk = new Color(240,70,10);
void Start()
{
sr = GetComponent<SpriteRenderer>();
sr.color = yeniRenk;
}
 

Mantık olarak çalışması gerekiyor ama parent üzerinden child üzerinden, alfa kanalı ile vb. pek çok yöntem denediniz, yazım hatalarını kontrol ettiniz, internetten "solved" yazan örnekleri de denediniz ama bir türlü çalışmıyor.

Bu durumda, engine'nin yeni yersiyonundaki beklentilerine kulak asmanız gerekiyor.

2019 sonrası için, sizden renkleri şöyle göndermenizi bekliyor:

Color(0.2f, 0.6f, 1f)
Siz renkleri RGB'yi baz alarak (15,210,245) şeklinde gönderirseniz tüm değerler 0-1 aralığının dışında olduğu için kodla renklendirme işleminiz çalışmayacaktır.

Peki "0-1" aralığındaki renk kodlarını nereden bulacağız?

Aslında böyle bir kaynağa ya da programa ihtiyaç yok.

Örneğin, istediğimiz Turkuaz renk tonu şöyle olsun:


Kaynak: encycolorpedia
Bu durumda 48 ya da 213'ü 0-1 aralığında bir değere dönüştürmemiz lazım.

O halde
0 eşittir 0,
255 eşittir 1 gibi düşürsek oranlama/map yaparsak şöyle girdiğimizde, sorunumuz çözülmüş olacak.

Color(0.18f, 0.83f, 0.78f) 
Güzel ama hep böyle uğraşacak mıyız?

Hayır.

Şöyle bir pratik çözüm gayet mümkün:

Color (48f/255, 213f/255, 200f/200)
Sonucun Float türünde olması için 48f 123f 200f gibi yazıyoruz. 0-1 aralığında değer çıkması için de her değeri 255'e bölüyoruz: RGB yerine Rf/255, Gf/255, Bf/255 Özetle script ile renklendirme kodumuzu sorunsuz çalışması için basitçe şöyle düzenleyebiliriz.
SpriteRenderer sr;
Color yeniRenk = new Color ( 240f/255 , 70f/255 , 10f/255 );
void Start()
{
sr = GetComponent<SpriteRenderer>();
sr.color = yeniRenk;
}


Ana görsel: My Screen Shot, Turkuaz Görsel: encycolorpedia

Posted from my blog with SteemPress :

http://murattatar.xyz/spriterenderer-color-ile-renk-degistirme-sorunu-cozumu/


Sort:  

Hocam, size yine buralarda görmek çok güzel. Aydınlatıcı bir yazı olmuş. RGB değerlerini 0-1 arası bölmeyi ilk defa duyuyorum. Mesleğim matbaa mühendisi olduğundan renklerle aram iyidir,ama RGB değerlerinin binary system de 0-255 arası hariç değerlendirmesi olduğunu bilmiyordum. Boş zamanlarimda yazılım ve Network Systems ile ugrasdigimdan, yazdıklarınızı biraz anlayabiliyorum.

Hocam izninizle, sanırım oluşan bir hataya değinmek istiyorum. Yazınızın şu bölümünde

"Sonucun Float türünde olması için 48f 123f 200f..."
123f yerine 213f olması gerekmez mi?

Ayrıca şu bölümde bir hata oluşmuş olabilir mi?

"Şöyle bir pratik çözüm gayet mümkün:

Color (48f/255, 213f/255, 200f/200) "

Son color değeri (.,.,200f/255) yine 255 olması gerekmez mi?

Yanlışım varsa aydınlatırsanız sevinirim.

Teşekkürler, Sizin yorumunuzu görmek de öyle..

Hocam maşallah çok dikkatlisiniz.
Evet, ilkinde Turkuaz yerine başka bir renk çıkabilir; 213 yerine 123 yazmışım :)
ikincisinde de 255 yerine 200'e bölüşüm burada sonuç 1 çıkacağı için 255 yazmışız gibi olacak.

olması gereken, ilk hata, ikinci hata renkleri şöyle:
trk.PNG