You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:12:51