我想为文本元素创建一个倒计时效果,特别是TextMeshProUGUI。我的想法是将一个脚本附加到我想要使用效果的每个TextMeshProUGUI,并在我想动态更改TextMeshProUGUI UI元素时调用startEffect()方法。
现在,如果我在每个TextMeshProUGUI元素上添加该脚本,它将自动调用每个帧上的Update()方法。但是,只要效果继续,我只需要执行Update(),这可能是1-2秒。
这样做的最佳方式是什么?我想过可能有一个接受TextMeshProUGUI作为参数的类,但不知怎的,现在它感觉像" Unity" - 就像有一个可序列化的编辑器TextMeshProUGUI字段,它只是附加到每个TextMeshProUGUI元素。但它确实有缺点,只要元素在后台运行,就运行Update()。
处理这种情况的正确方法是什么?
答案 0 :(得分:2)
首先,我希望能正确理解你的问题。如果你想对对象启用一些效果,然后禁用它上面的每个逻辑(永远),你可以这样做:
public void Update(){
//...do your logic until the end...
enabled = false; //This will disable this component (script) forever
}
如果可以多次触发逻辑,只需使用标志......
public void Update(){
if (update_is_needed){
//do your logic...
}
}
并且忽略Update调用给出的开销,是无关紧要的。 我希望这会有所帮助,而不是低估你的需求。
更新:好的,我知道你要做什么。你可以这样做(未经测试):
1)声明将更新标签的协程:
IEnumerator IncreaseMoney(amount) {
for (int i = actualMoney; i <= actualMoney + amount; i++)
{
moneyGUI.text = i.toString();
yield return new WaitForSeconds(0.1f);
}
}
}
2)调用它(例如:在带有货币对象的OnCollisionEnter()中)
StartCoroutine (IncreaseMoney(amount));
正如我所说,我现在无法测试,希望它是一个有效的起点。 并且,我假设您使用C#进行编码。