使用UnityScript

时间:2015-07-04 11:21:23

标签: unity3d unityscript unity3d-2dtools

在我的2D项目中,我在代码中创建了一个画布和一个按钮。我想在代码中设置按钮的文本,但经过多次尝试后我似乎无法做到。

我的UnityScript代码:

#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);

}

这提供了错误

“NullReferenceException:对象引用未设置为对象的实例 GameLogicLogin.Start()(在Assets / GameLogicLogin.js:11)“

--------------------------------编辑-------------- -------------------------

生成的层次结构如下所示:http://puu.sh/iMYe6/4f4a8f545c.png 在底部的左侧是预制件I链接到脚本。

以下行不会导致错误并且似乎更改了文本,但更改未显示在游戏中,原始文本也未分配给预制件中的“文本”。

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

2 个答案:

答案 0 :(得分:2)

如果您要在统一编辑器中构建按钮,您可以轻松地在脚本中更改其文本:

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

我想你可以很容易地调整它,以满足你的需要而不用勺子喂。

答案 1 :(得分:1)

您正在实例化UnityEngine.UI.Button,但UnityEngine.UI.Text没有loginButton组件因此错误。

你有没有理由将这个对象实例化?

如果你在编辑器中将游戏对象链接到var comps = loginButton.gameObject.GetComponentsInChildren(UnityEngine.UI.Text); comps[0].text = "login"; ,我认为你是,你应该这样做:

emacs