我想单击一个按钮并更改其文本的颜色和消息属性。
我有更改其颜色的按钮,但我需要更改其文本的颜色之一。
private void TurnGreen(Button button)
{
ColorBlock colors = button.colors;
colors.normalColor = Color.green;
button.colors = colors;
}
上面的代码更改了我喜欢的按钮颜色,但是我宁愿更改按钮的文本。但是请注意,我的按钮有两个text-childs。我要更改的文本的名称为“矿石”。
答案 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;
答案 1 :(得分:0)
一种更好的方法是从编辑器中确定有问题的文本组件(假设您的按钮是Prefab),而不是通过Linq遍历这些组件。如果您这样做,那么如果您想在其他组件/按钮上使用这种类型的行为,但又不想每次都更改Linq搜索文本,则比例会更好一些。
为此,请创建一个新字段,如下所示:
public Text textToChange;
然后从编辑器将有问题的组件从按钮拖到组件脚本中,然后在代码中执行以下操作:
textToChange?.color = Color.green;
然后繁荣,就完成了...“?”。还会为您检查是否为空,而不包含if块。