【问题标题】:Can't change GameObject color via script?无法通过脚本更改游戏对象颜色?
【发布时间】:2019-01-03 21:37:21
【问题描述】:

我有一个用于 UI 的画布,图像的大小与画布相同。 Image 具有 rgba 的 0,0,0,0 ,使其不可见(因为 a 为 0)。我想让图像从脚本中淡入黑色。这是我正在使用的代码:

public class NavigationC : MonoBehaviour {
    public Image screen;
    float fadeTime = 3f;
    Color colorToFadeTo;

    void StartGame()
    {
        colorToFadeTo = new Color(0f, 0f, 0f, 255f);
        screen.CrossFadeColor(colorToFadeTo, fadeTime, true, true);
    }
}

现在,这在执行时不会做任何事情。但是当我手动统一更改图像的a 值以使图像变得可见时,我可以看到脚本更改了图像的颜色。所以脚本确实有效,只是不可见,因为脚本没有更改 a 值。 那么如何让图片从不可见淡化为黑色呢?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    这是你的问题:

    new Color(0f, 0f, 0f, **255f**);

    Color 构造函数参数采用从 0f 到 1f 的值,但您将 0f 传递给 255f 范围值。

    应该是:

    colorToFadeTo = new Color(0f, 0f, 0f, 1f);
    

    如果您想使用0 到255 范围,则必须将其除以255。

    colorToFadeTo = new Color(0f, 0f, 0f, 255f/255f);
    

    另外,Color32 可以取值在0 和255 之间。您可以使用它然后将其转换回颜色。

    Color32 color32 = new Color32(0f, 0f, 0f, 255f));
    Color color = color32;
    

    【讨论】:

    • 那么,当我给图像一个颜色开始时,为什么 255f完美地工作?
    • 我在去255f之前尝试了1f,1f也没有用。
    • 现在我什至不能让 255f 或任何其他值工作,即使我给图片一个颜色开始;它只是跳到黑色或根本没有变化。
    • 如果您仍有疑问,请阅读doc。它清楚地表明它期望范围从0f 到1f。查看该链接中的所有静态变量。他们使用0 到1。他们都没有使用255 或高于1 的任何东西。如果变化如此之快,请将false 传递给ignoreTimeScale 参数。 screen.CrossFadeColor(colorToFadeTo, fadeTime, false, true);
    • 就像我说的...我确实尝试过1f。只是说当我在1f 和255f 之间切换时,统一的行为并没有什么不同。他们都工作或不工作,虽然显然不是我想要的。最后,我通过将图像的a 设置为 255 中的 1 来解决了这个问题。我不知道为什么会这样,但从 0 开始不会,但它仍然有效。我不怀疑您的回答,我知道您所说的是全部事实,只是说这不是导致此问题的原因。
    猜你喜欢
    • 2022-12-17
    • 2022-11-24
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    相关资源
    最近更新 更多