为什么将颜色改为黄色而不能以统一的方式使用spriteRenderer?

时间:2017-03-25 05:41:17

标签: c# unity3d colors

我有一朵花,花瓣分别来自茎秆:

enter image description here

使用以下脚本将花瓣更改为绿色或黑色没有问题:

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;
        }
    }
}

enter image description here

但奇怪的是,颜色不会变成黄色:

flower.transform.GetChild(i).gameObject.GetComponent<SpriteRenderer>().color = Color.yellow;

请注意,Random.range()不是问题。它无法更改为黄色/白色,但blackgreen等颜色可以正常。

如果您原谅我提出另一个问题,那么来自rgba的{​​{1}}的颜色表示是否在Photoshop表示0-255中除以255? 这样一种颜色0-1RGBA(255,255,1,255)来到Unity中的Color(255/255.0, 255/255.0, 1/255.0, 255/255.0)

仅供参考,花瓣'spriteRenderer的属性如下,我使用Color(1.0f,1.0f,0.00001f, 1.0f)材料: enter image description here

编辑:

根据评论的要求添加原始精灵表:

enter image description here

1 个答案:

答案 0 :(得分:4)

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

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

问题不在于你的代码;问题是精灵的着色器是如何工作的。 sprite-default着色器通过将您正在更改的color字段乘以精灵的实际RGB值来工作。如果其中一个RGB字段的值在精灵的纹理中为0,那么将它乘以某个值将意味着它仍为0.我认为这就是你正在发生的事情。

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

如果您感到好奇,可以下载Unity内置着色器Here的源代码。