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

Unity如何设置时间循环 解决计时重置逻辑失效问题

问题根因

你的重置逻辑不生效的核心原因是代码作用域写错了:

  • 你把realTime > 30f时重置为0的逻辑,写在了陨石生成的if判断块内部
  • 而外层进入生成逻辑的前提条件就包含realTime < 30f,也就是说只要能进到这个代码块,realTime必然小于30,内部判断realTime>30f的条件永远不可能成立,重置代码永远不会执行,realTime自然会一直累加超过30。

另外还有个逻辑偏差:你初始给realTime赋值为4f,会导致第一个周期的休息时间只有1秒,和你设计的前5秒无陨石的规则不符。

修正后代码

调整逻辑很简单:把周期重置的逻辑移到Update的最外层,和陨石生成逻辑解耦,每帧都检查周期是否走完,同时修正初始时间值即可:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    public GameObject enemy;
    float defaultSpawnTime = 1f;
    float spawnTime = 1f;
    // 初始时间改为0,保证第一个周期前5秒正常休息
    float realTime = 0f;
    
    void Update()
    {
        spawnTime -= Time.deltaTime;
        realTime += Time.deltaTime;

        // 周期重置逻辑移到最外层,每帧判断
        if (realTime > 30f)
        {
            realTime = 0f;
        }

        // 陨石生成判断:冷却走完 + 处于周期内25秒生成阶段
        if (spawnTime < 0 && realTime > 5f && realTime < 30f)
        {
            Instantiate(enemy, new Vector3(Random.Range(-2.3f, 2.3f), 8f, 0), Quaternion.identity);
            Instantiate(enemy, new Vector3(Random.Range(-2.3f, 2.3f), 8f, 0), Quaternion.identity);
            spawnTime = defaultSpawnTime;
        }
    }
}

额外优化:直接用Quaternion.identity代替手写的Quaternion.Euler(0,0,0),是Unity里创建无旋转物体的标准写法,性能更好也更简洁。

内容的提问来源于stack exchange,提问作者Florianus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:26