2016-09-22 804 views
-1

enter image description here我想在Unity中单击它时更改按钮的文本。我是C#的新手。请帮助我!如何在UNITY中单击它时更改按钮的文本?

,我加入到我的按钮元素

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class Buttontextchange : MonoBehaviour { 

Text Buy; 


    // Use this for initialization 
    void Start() { 
    Buy = transform.FindChild("Text").GetComponent<Text>(); 
    } 

    // Update is called once per frame 
    void Update() { 

    } 

public void clicked() 
{ 
Debug.Log("Button Buy Clicked!"); 
Buy.text = "i am a button!"; 

} 
} 

剧本我已经尝试了很多答案,但它不工作了我!我有画布内的按钮。非常感激你的帮助 ! enter image description here

+0

您是否收到任何错误后? –

+0

您需要找到Button组件,点击节点击+并拖动脚本到插槽中。然后你可以在下拉菜单中找到该方法。我想你错过了。 – Everts

+0

我已经尝试了你提到的@Everts,但它没有改变。 –

回答

1

你的问题来自于你的文字和按钮的设置指定的文本和按钮的引用。

Buttontextchange组件位于ButtonText对象上。我可以在照片上看到物体没有孩子。但你运行:

void Start() { 
    Buy = transform.FindChild("Text").GetComponent<Text>(); 
} 

这是你可能得到错误的地方。 Text对象位于Button对象下,因此您可以在onClick调用中传递它。

public class Buttontextchange : MonoBehaviour 
{ 
    public void clicked(Text textRef) 
    { 
     Debug.Log("Button Buy Clicked!"); 
     textRef.text = "i am a button!"; 
    } 
} 

然后在检查器中将文本对象拖入参数槽中。

编辑:用户想改变上点击按钮的颜色:

public class Buttontextchange : MonoBehaviour 
{ 
    public void clicked(Gameobject buttonObj) 
    { 
     Debug.Log("Button Buy Clicked!"); 
     Text text = buttonObj.GetComponentInChildren<Text>(true); 
     if(text != null){ 
      textRef.text = "i am a button!";´ 
     } 
     Image image = buttonObj.GetComponent<Image>(); 
     if(image != null){ 
      image.color = newColor; 
     } 
    } 
} 
+0

谢谢Evert!你救了我的一天!你总是帮我找到解决方案:)非常感谢! –

+0

我添加了颜色变化。请注意,该参数不再是Text组件,而是父GameObject。在你的情况下,图片上突出显示的Button对象。 – Everts

+0

谢谢你一吨Evert! –

0

您缺少公开关于Text属性的c#关键字。我稍微改变了你的脚本,这样你就可以从Unity编辑

public class Buttontextchange : MonoBehaviour 
{ 

    public Button BuyButton; 
    public Text BuyText; 

    void Start() 
    { 
     BuyButton.onClick.AddListener(OnButtonClicked); 
     if (BuyText == null) 
      BuyText = BuyButton.GetComponentInChildren<Text>(); 
    } 

    public void OnButtonClicked() 
    { 
     Debug.Log("Button Buy Clicked!"); 
     BuyText.text = "i am a button!"; 
    } 

} 
+0

非常感谢您的回答。但我得到下面的错误,NullReferenceException:对象引用未设置为对象的实例 Buttontextchange.clicked()(在Assets/Buttontextchange.cs:17)@Paradox Forge –

+0

这将意味着你没有分配“BuyText “在检查员中变量。我已经改编了剧本,所以你不必这样做。 –

+0

非常感谢!它现在工作:) –

0

只是这样做click事件 Button.GetComponentInChildren(Text).text = "Button Clicked";

相关问题