Unity UI图像不改变颜色,尽管可选择禁用。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity UI图像不改变颜色,尽管可选择禁用。相关的知识,希望对你有一定的参考价值。

我在Unity中实例化了一个UI图像预制件,并设置了它的颜色,但它没有工作。

这是我的代码。

public class Test
{
    public ImageInitializer pImage;

    private void Start()
    {
        var temp = Instantiate(pImage, GameObject.FindObjectOfType<Canvas>().transform);
        temp.Selectable = false;
        temp.Color = Color.red;
    }
}

public class ImageInitializer : MonoBehaviour
{
    public Image image;
    public Selectable selectable;

    public bool Selectable
    {
        set => selectable.enabled = value;
    }

    public Color Color
    {
        set => image.color = value;
    }
}

这个预制件只是一个简单的UI按钮,上面有ImageInitializer脚本。

但它并没有设置颜色。事实上,图像组件的颜色是设置了,但它仍然使用可选择的正常颜色。如果我在编辑器中打开和关闭它,一切都能正常工作。

你知道为什么它不更新图像吗?

===编辑===

到目前为止,我试过 LayoutRebuilder.ForceRebuildLayoutImmediate(temp.transform as RectTransform)temp.image.SetAllDirty() 和一个禁用的coroutine Selectable等一格,然后设置颜色。

什么都没有用...

答案

我认为你想做一个可选择的自定义图像类,做一个自定义类,其中有一个你可以操作的图像,它也是 "可选择 "的一个子类。现在你有一个随机的可选择的类,没有任何附加的功能。你可以把代码做成你自己的,但是要像这样。

public class ImageInitializer : Selectable
    {
    public Image image;

    //use enabled = true or enabled = false;

    public Color Color
    {
        set => image.color = value;
    }
}

然后你就可以实现像 "OnPointerEnter""OnPointerExit""OnPointerDown "这样的方法... ...等等。

另一答案

你用的是哪个版本的unity编辑器?

我想这只是一个没有重建的问题。

public ImageInitializer pImage;
private void Start()
{
    var temp = Instantiate(pImage, GameObject.FindObjectOfType<Canvas>().transform);
    temp.Selectable = false;
    temp.Color = Color.red;
    LayoutRebuilder.ForceRebuildLayoutImmediate(temp.GetComponent<RectTransform>());
}

以上是关于Unity UI图像不改变颜色,尽管可选择禁用。的主要内容,如果未能解决你的问题,请参考以下文章

Unity 在运行时更改 UI 图像颜色

Selectable - 选择后,元素改变其外观

unity_UI相关

Unity学习之Shader

在现代UI中改变颜色似乎是不可能的

Unity ShaderSpecial EffectsCorrect 色彩修正(UI)