Waltari
Waltari

Reputation: 1249

Unity 5 change button text created with UnityScript

In my 2D project I create a canvas and a button in code. I would like to set the text of the button in code, but after numerous attempts I can't seem to do it.

My UnityScript code:

#pragma strict

var loginButton : UnityEngine.UI.Button;

function Start () {
    var canvas = new GameObject ("canvas", Canvas);

    var instance : UnityEngine.UI.Button = Instantiate(loginButton);


    instance.GetComponent(UnityEngine.UI.Text).text = "login"; //Error below


    instance.transform.position = Vector2(0,0);
    instance.transform.SetParent(canvas.transform);

}

This provides an error

"NullReferenceException: Object reference not set to an instance of an object GameLogicLogin.Start () (at Assets/GameLogicLogin.js:11)"

--------------------------------Edit---------------------------------------

The generated hierarchy looks like this: http://puu.sh/iMYe6/4f4a8f545c.png On the left at the bottom is the prefab I link to the script.

The following line doesn't cause an error and seems to change the text, but the change doesn't show up in game nor does the original text assigned to the "Text"in the prefab.

instance.GetComponentInChildren(UnityEngine.UI.Text).text = "login";

Upvotes: 0

Views: 6310

Answers (2)

Richard
Richard

Reputation: 21

If you would of built your button in the unity editor you could easily change its text in script like this:

var button = GameObject.Find("buttonObjectName").GetComponent<Button>();
button.GetComponentInChildren<Text>().text = "What ever you like";

I imagine you can easily adjust this to fit your needs without being spoon fed.

Upvotes: 2

Radu Diță
Radu Diță

Reputation: 14171

You are instantiating a UnityEngine.UI.Button, that doesn't have a component for UnityEngine.UI.Text hence the error.

Is there any reason why you are instantiating that object?

If you are linking in the editor a game object to loginButton, and I think you are, you should do something like this:

var comps = loginButton.gameObject.GetComponentsInChildren(UnityEngine.UI.Text);
comps[0].text = "login";

Upvotes: 1

Related Questions