为什么不能统一使用spriteRenderer将颜色更改为黄色?

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()不是问题。它只是不能变为黄色/或白色,但颜色,如blackgreen都会好的。

而且,如果您可以原谅我问另一个问题,那么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表:

在此处输入图片说明

Dan*_*ert 5

您需要将花精灵的花瓣弄成​​白色。(即在您的Sprite编辑软件中更改它们,而不是在Unity中更改)。这将允许您在编辑器中更改精灵的颜色。

要检查这一点,请尝试仅在检查器中将Sprite Renderer组件的颜色更改为黄色。它仍然应该是红色的。还要检查Sprite Renderer组件的颜色字段在运行时是否为黄色。这将使您确定该代码正在运行。

问题不在于您的代码;问题是精灵的着色器如何工作。的sprite-default着色器的工作原理是将乘以color你被精灵的实际RGB值变化的领域。如果在子画面的纹理中RGB字段之一的值为0,则将其乘以某个值将意味着该值仍为0。我认为这对您来说正在发生。

通过导入纯红色精灵,然后尝试在检查器中更改其颜色,可以看到这种情况。它将变成黑色。

如果您好奇,可以在此处下载Unity内置着色器的源代码。