Unity C#开发:Yield Return失效?高分删除提示文本无法隐藏
Unity高分删除提示文本无法自动隐藏的解决方法
问题根源
- 启动协程后立刻执行
gameObject.SetActive(false),会直接禁用当前脚本所在的GameObject,导致协程被强制终止,根本跑不到延迟隐藏的逻辑。 HideTextAfterDelay协程里没有编写任何隐藏successfullyDeleted文本的代码,就算协程正常执行也不会有效果。
修正后的代码
public GameObject successfullyDeleted; public void DeleteHighscore() { // 重置高分并确保数据写入本地 PlayerPrefs.SetInt("highscore", 0); PlayerPrefs.Save(); // 显示提示文本(如果初始状态为隐藏) successfullyDeleted.SetActive(true); // 启动延迟隐藏协程 StartCoroutine(HideTextAfterDelay(5)); // 不要禁用当前脚本所在对象,否则协程会直接终止 // gameObject.SetActive(false); } IEnumerator HideTextAfterDelay(float delay) { Debug.Log("HideTextAfterDelay called with delay: " + delay); yield return new WaitForSeconds(delay); // 延迟后执行隐藏操作 successfullyDeleted.SetActive(false); }
额外注意事项
- 确认Unity Inspector中
successfullyDeleted变量已正确关联到提示文本的GameObject。 - 如果「Confirm」按钮和当前脚本在同一GameObject上,需单独给确认按钮设置引用,通过该引用控制按钮隐藏,不要直接禁用整个脚本所在对象。
内容的提问来源于stack exchange,提问作者Kenan
相关产品推荐
相关产品推荐

