【问题标题】:Unity UI image doesn't change color although Selectable disabled尽管 Selectable 已禁用,但 Unity UI 图像不会改变颜色
【发布时间】:2020-09-09 13:23:22
【问题描述】:

我正在 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 脚本。

但它没有设置颜色。其实image组件的颜色已经设置好了,但是还是使用了selectable的正常颜色。如果我在编辑器中打开和关闭它,一切正常。

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

===编辑===

到目前为止,我尝试了LayoutRebuilder.ForceRebuildLayoutImmediate(temp.transform as RectTransform)temp.image.SetAllDirty() 以及禁用Selectable 的协程,等待一帧并设置颜色。

没有任何效果...

【问题讨论】:

    标签: c# unity3d user-interface


    【解决方案1】:

    我认为您想创建一个可选的自定义图像类,创建一个具有您可以操作的图像的自定义类,该图像也是“可选”的子级。现在你有一个随机选择不附加到任何东西/做任何事情。您可以编写自己的代码,但如下所示:

    public class ImageInitializer : Selectable
        {
        public Image image;
    
        //use enabled = true or enabled = false;
    
        public Color Color
        {
            set => image.color = value;
        }
    }
    

    然后你可以实现'OnPointerEnter' 'OnPointerExit' 'OnPointerDown'...等方法

    【讨论】:

    • 该预制件也用于项目的其他部分,所以我需要可选组件。奇怪的是,如果在预制件中关闭可选择项,我的代码很好(但我不能将其关闭,因为我再次在其他地方使用它)
    【解决方案2】:

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

    我猜这只是不重建的问题。

    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 2018.3.14f1,不幸的是这个解决方案没有奏效。图片颜色仍未更新
    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 2010-11-23
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    相关资源
    最近更新 更多