在我的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";
答案 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