我有一个Canvas(世界空间渲染模式),在三维空间(这是一个VR应用程序)中显示了一个Text和一个Button组件。画布在运行时使用预制实例化。 我使用以下内容获得对Text对象的引用:
_codeTextLabel = canvasPrefab.transform.Find("CodeTextLabel").gameObject.GetComponent<Text>();
我想使用以下命令在运行时更新文本:
void Update()
{
_codeTextLabel.text = _codeText;
}
其中_codeText
只是我根据特定事件更新的变量。
问题是文本仅在第一次更新,但是如果我尝试更改变量,则什么也不会发生。我尝试了几种组合以及方法_codeTextLabel.SetAllDirty()
,但是它不起作用。
更新文本的唯一方法是重新实例化预制件。
答案 0 :(得分:1)
您要在设置值之前实例化预制件吗?如果在实例化之前存储_codeTextLabel引用,则您的引用将指向预制对象而不是运行时对象。我看不到您的其余代码,因此无法确定。 (我本来想发表评论,但由于我是新人,所以我没有这样做的声誉)
编辑:我做了一个测试,尝试重新创建您的问题。我做了以下脚本,它似乎可以正常工作。 CanvasPrefab是附加了UnityEngine.UI.Text组件的世界空间画布。 (脚本被附加到场景中一个空的游戏对象上)
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;
}
}
答案 1 :(得分:0)
没有代码,这只是我能为您猜到的,因此请检查以上内容,希望以上内容是正确的。