Unity中修复激光障碍物生成-销毁循环逻辑问题求助
修复后的激光循环生成销毁逻辑
原代码的核心问题是激光生成后立刻被销毁,且冷却状态控制逻辑混乱,无法实现“生成→保留一段时间→销毁→等待冷却→重复生成”的循环。以下是修复后的代码及说明:
修复后的完整代码
public GameObject laser; public Transform spawnPoint; // 两次激光生成之间的冷却间隔 public float spawnCooldown = 5f; // 激光生成后持续存在的时长 public float laserDuration = 2f; private float currentCooldown; private GameObject activeLaser; private void Start() { // 初始化冷却时间 currentCooldown = spawnCooldown; } void Update() { // 当前无活跃激光时,进行冷却倒计时 if (activeLaser == null) { currentCooldown -= Time.deltaTime; // 冷却结束,生成激光 if (currentCooldown <= 0f) { activeLaser = Instantiate(laser, spawnPoint.position, spawnPoint.rotation); // 延迟指定时长后销毁激光 Destroy(activeLaser, laserDuration); // 重置冷却时间,准备下一次循环 currentCooldown = spawnCooldown; } } }
关键修改说明
- 拆分时间参数:把原代码中混淆的时间变量拆分为
spawnCooldown和laserDuration,逻辑更清晰,也能直接在Unity Inspector面板调整数值 - 简化状态判断:用
activeLaser是否为空替代原有的spawned变量,直接判断当前是否有活跃激光,避免状态逻辑混乱 - 使用延迟销毁:借助Unity内置的
Destroy(GameObject, float delay)方法,自动处理激光的延迟销毁,省去手动计时的冗余代码 - 理清循环逻辑:只有在无活跃激光时才推进冷却倒计时,生成激光后自动重置冷却,完美匹配“冷却→生成→持续→销毁→冷却”的循环流程
内容的提问来源于stack exchange,提问作者Fadl Ghaddar
相关产品推荐
相关产品推荐

