Unity脚本求助:实现目标对象激活后定时禁用的循环执行
实现目标对象激活后自动定时禁用的循环逻辑
你需要让目标对象每次被激活后,都能在设定时长后自动禁用,循环生效。原脚本仅执行一次的原因是只启动了单次协程,没有持续监听对象的激活状态。以下是修改后的实现:
using System.Collections; using UnityEngine; public class DisableTimer : MonoBehaviour { public GameObject targetObject; public float waitTime = 3f; private void Start() { StartCoroutine(MonitorAndDisableLoop()); } private IEnumerator MonitorAndDisableLoop() { // 持续循环监听目标对象状态 while (true) { // 等待目标对象被激活 yield return new WaitUntil(() => targetObject.activeSelf); // 等待设定的延迟时长 yield return new WaitForSeconds(waitTime); // 确认对象仍处于激活状态后再禁用,避免无效操作 if (targetObject.activeSelf) { targetObject.SetActive(false); } } } }
关键改动说明:
- 将单次执行的协程替换为无限循环协程,启动后会持续监听目标对象状态,无需重复启动
- 使用
WaitUntil替代固定等待,精准触发:只有当目标对象被激活时,才进入倒计时流程 - 添加激活状态判断:等待时长结束后,先检查对象是否仍处于激活状态,避免在等待期间对象被手动禁用时执行无效的禁用操作
- 调整命名为符合C#规范的格式,提升代码可读性
内容的提问来源于stack exchange,提问作者Gio
相关产品推荐
相关产品推荐

