我有一个画布(世界空间渲染模式),文本和按钮组件显示在一个三维空间(这是一个虚拟现实应用程序)。画布在运行时使用预置文件实例化。我使用以下方法获得文本对象的引用:
_codeTextLabel = canvasPrefab.transform.Find("CodeTextLabel").gameObject.GetComponent<Text>();
我想在运行时使用以下方法更新文本:
void Update()
{
_codeTextLabel.text = _codeText;
}
其中_codeText
只是一个变量,我根据特定的事件进行更新。问题是,文本只在第一次更新,但如果我试图更改变量,什么都不会发生。我尝试过几个组合,也尝试了_codeTextLabel.SetAllDirty()
方法,但是它不起作用。
更新文本的唯一方法是重新实例化预置文件。
发布于 2019-10-27 16:26:38
在设置值之前是否实例化预置。如果在实例化之前存储_codeTextLabel引用,那么引用将指向预置,而不是运行时对象。我看不出你剩下的代码,所以我不能肯定。(我本想发表评论的,但由于我是新来的,我没有这样做的声誉)
编辑:我做了一个测试,试图重现你的问题。我做了下面的脚本,它看起来像预期的那样工作。CanvasPrefab是一个附带UnityEngine.UI.Text组件的worldspace画布。(脚本附加在场景中的一个空游戏对象上)
public class ChangeText : MonoBehaviour
{
public GameObject CanvasPrefab;
private GameObject runtimeCanvas;
public string runtimeText = "something";
private Text textRef;
// Start is called before the first frame update
void Start()
{
runtimeCanvas = GameObject.Instantiate(CanvasPrefab);
textRef = runtimeCanvas.GetComponentInChildren<Text>();
}
// Update is called once per frame
void Update()
{
textRef.text = runtimeText;
}
}
发布于 2019-10-27 20:27:13
只要你做错了什么事情,它就绝对有效,所以我想有几个例子是canvasPrefab.transform.Find("CodeTextLabel").gameObject.GetComponent();"
没有密码,这是我唯一能猜到的东西,所以请检查上面,我希望上面有这样的情况。
https://stackoverflow.com/questions/58584503
复制相似问题