arm*_*ong 2 c# colors unity-game-engine
我有一朵花,其花瓣分别来自茎。
我可以使用以下脚本将花瓣更改为绿色或黑色:
private void Start()
{
flower = transform.GetChild(transform.childCount - 1).gameObject;
if (Random.Range(0, 1.0f) < 0.5f)
{
for (int i = 0; i < flower.transform.childCount; i++)
{
flower.transform.GetChild(i).gameObject.GetComponent<SpriteRenderer>().color = Color.green;// Color.yellow;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是奇怪的是,颜色不会因此变成黄色:
flower.transform.GetChild(i).gameObject.GetComponent<SpriteRenderer>().color = Color.yellow;
Run Code Online (Sandbox Code Playgroud)
注意,这Random.range()不是问题。它只是不能变为黄色/或白色,但颜色,如black,green都会好的。
而且,如果您可以原谅我问另一个问题,那么rgbafrom 的颜色表示形式0-1是否在Photoshop表示形式中为0-255除以255?使得颜色RGBA(255,255,1,255)会Color(255/255.0, 255/255.0, 1/255.0, 255/255.0)由它来Color(1.0f,1.0f,0.00001f, 1.0f)在团结?
仅供参考,花瓣的spriteRenderer的属性如下,并且我使用了Sprite-Default材质:

根据注释的要求添加原始Sprite表:
您需要将花精灵的花瓣弄成白色。(即在您的Sprite编辑软件中更改它们,而不是在Unity中更改)。这将允许您在编辑器中更改精灵的颜色。
要检查这一点,请尝试仅在检查器中将Sprite Renderer组件的颜色更改为黄色。它仍然应该是红色的。还要检查Sprite Renderer组件的颜色字段在运行时是否为黄色。这将使您确定该代码正在运行。
问题不在于您的代码;问题是精灵的着色器如何工作。的sprite-default着色器的工作原理是将乘以color你被精灵的实际RGB值变化的领域。如果在子画面的纹理中RGB字段之一的值为0,则将其乘以某个值将意味着该值仍为0。我认为这对您来说正在发生。
通过导入纯红色精灵,然后尝试在检查器中更改其颜色,可以看到这种情况。它将变成黑色。
如果您好奇,可以在此处下载Unity内置着色器的源代码。