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

Unity3D程序化生成地砖逐次销毁异常:如何实现每秒销毁一个直至全部清除?

解决Unity程序化生成方块逐个销毁的问题

咱们先拆解下你的代码里存在的几个核心问题:

  1. Update重复启动协程:你在Start()里已经启动了销毁协程,但Update()每帧都再调用一次,这会瞬间生成上百个并行协程,一开始可能批量销毁方块,后续逻辑直接混乱。
  2. 协程仅执行单次销毁:原SelfDestruct协程只完成一次销毁就结束了,没有循环逻辑持续执行销毁动作。
  3. 未维护方块列表:销毁方块后没有从blockList里移除对应元素,导致后续随机取索引时,可能选中已销毁的无效对象(Destroy()对已销毁对象无作用),甚至触发索引越界错误。

下面是修改后的完整脚本,我标注了关键修改点:

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

public class Wall : MonoBehaviour {
    public GameObject block;
    public int width = 10;
    public int height = 10;
    public int timeDestroy = 1;
    List<GameObject> blockList = new List<GameObject>();

    void Start(){
        // 生成方块的逻辑保持不变
        for (int y=0; y<height; ++y) {
            for (int x=0; x<width; ++x) {
                Vector3 offset = new Vector3(x, 0, y);
                GameObject newBlock = Instantiate(block, transform.position + offset, Quaternion.identity);
                blockList.Add(newBlock);
            }
        }
        // 仅在Start中启动一次协程即可
        StartCoroutine(SelfDestruct());
    }

    // 移除Update中的SelfDestruct调用,避免重复启动协程
    // void Update() {
    //     SelfDestruct();
    // }

    IEnumerator SelfDestruct() {
        // 循环执行:只要列表里还有方块就继续销毁
        while (blockList.Count > 0) {
            // 等待指定的销毁间隔
            yield return new WaitForSeconds(timeDestroy);
            // 随机选取一个有效的方块索引
            int randomIndex = Random.Range(0, blockList.Count);
            GameObject blockToDestroy = blockList[randomIndex];
            // 先从列表移除元素,避免后续访问无效对象
            blockList.RemoveAt(randomIndex);
            // 销毁选中的方块
            Destroy(blockToDestroy);
        }
        // 所有方块销毁完毕后,可在此添加游戏结束逻辑
        Debug.Log("所有方块已销毁,游戏结束!");
    }
}

关键修改说明:

  • 移除Update的协程调用:确保只启动一次协程,彻底避免多协程并行的逻辑混乱。
  • 添加while循环:让协程持续运行,直到方块列表为空,实现逐个销毁的持续逻辑。
  • 销毁前移除列表元素:每次销毁方块前先从blockList中移除对应项,保证后续随机索引永远指向有效、未被销毁的方块,同时列表长度动态减少,直到循环自然结束。
  • 优化变量命名:把原代码里的hello改为newBlock,提升代码可读性。

修改后运行游戏,就能实现每隔1秒随机销毁一个方块,直到所有100个方块全部消失的效果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:37:36