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

问题描述 投票:0回答:1

我在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等一格,然后设置颜色。

什么都没有用...

c# unity3d user-interface
1个回答
0
投票

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

public class ImageInitializer : Selectable
    {
    public Image image;

    //use enabled = true or enabled = false;

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

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


0
投票

你用的是哪个版本的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>());
}
© www.soinside.com 2019 - 2024. All rights reserved.