如何更改按钮文本的颜色?

时间:2019-10-28 22:05:31

标签: c# unity3d

我想单击一个按钮并更改其文本的颜色和消息属性。

我有更改其颜色的按钮,但我需要更改其文本的颜色之一。

private void TurnGreen(Button button)
{
    ColorBlock colors = button.colors;
    colors.normalColor = Color.green;
    button.colors = colors;
}

上面的代码更改了我喜欢的按钮颜色,但是我宁愿更改按钮的文本。但是请注意,我的按钮有两个text-childs。我要更改的文本的名称为“矿石”。

2 个答案:

答案 0 :(得分:0)

好久没有做Unity了,所以我的知识有点生锈。 确保在脚本中设置了using System.Linq;

        // Considering that "button" is the one on which you clicked.
        // By definition, we have 2 Text children (for single Text, we 
        // could use button.GetComponentInChildren<Text>().color directly, as it returns single element.
        var oreText = button.GetComponentsInChildren<Text>().FirstOrDefault(o => o.name == "Ore"); // Unity allows same naming...
        // I had 2 Text components initially returned: Ore and Wood. 
        // Got the Ore text component with FirstOrDefault. Now check it really exists and set color.            
        if (oreText != null) // Long way to compare. For illustration.
        {
            oreText.color = Color.green;
        }
        // Also, if "Ore" button really exists, you can directly set it from "Single" method:
        // button.GetComponentsInChildren<Text>().Single(o => o.name == "Ore").color = Color.green;

enter image description here

答案 1 :(得分:0)

一种更好的方法是从编辑器中确定有问题的文本组件(假设您的按钮是Prefab),而不是通过Linq遍历这些组件。如果您这样做,那么如果您想在其他组件/按钮上使用这种类型的行为,但又不想每次都更改Linq搜索文本,则比例会更好一些。

为此,请创建一个新字段,如下所示:

public Text textToChange;

然后从编辑器将有问题的组件从按钮拖到组件脚本中,然后在代码中执行以下操作:

textToChange?.color = Color.green;

然后繁荣,就完成了...“?”。还会为您检查是否为空,而不包含if块。