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

Unity开发:如何删除克隆GameObject而非原始对象

Unity 房间生成与旧房间删除问题修复

问题场景

开发游戏时需求为:打开门生成新房间,生成3个新房间后,删除往前数第3个旧房间。现有代码中RoomsOpened计数逻辑正常,但执行删除时会销毁原始GameObject而非目标克隆体。

原代码

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

public class RoomDeGenarator : MonoBehaviour
{
    private float RoomsOpened = 0;
    public void DoorCount(){
        RoomsOpened ++;
        if(RoomsOpened > 3.0f){
            Destroy(gameObject);
        }
    }
}

问题根源

你把计数和删除逻辑写在了每个房间的脚本里,每个克隆体都会维护独立的RoomsOpened变量,而且脚本销毁的是自身所在的GameObject——如果原始预制体也挂了这个脚本,甚至可能误删原始资源;更关键的是,这套逻辑根本没跟踪「往前数第3个旧房间」的对象引用,完全没定位到要删的目标克隆体。

修复方案

用全局队列统一跟踪生成的房间克隆体,把计数、删除逻辑从单个房间脚本剥离到全局管理器中:

  1. 创建全局房间管理器(挂在场景中的GameManager对象上),用Queue<GameObject>存储生成的房间,队列「先进先出」的特性刚好匹配「删除最早生成的旧房间」的需求。
  2. 每次生成新房间克隆体时将其加入队列;若队列长度超过3,取出队列头部的旧房间并销毁。
  3. 房间脚本只保留「开门触发生成新房间」的逻辑,无需处理计数和删除。

示例代码

全局房间管理器脚本

using System.Collections.Generic;
using UnityEngine;

public class RoomManager : MonoBehaviour
{
    // 拖拽你的原始房间预制体到这里
    public GameObject roomPrefab;
    // 存储生成的房间队列,先进先出
    private Queue<GameObject> roomQueue = new Queue<GameObject>();
    // 最多保留3个房间
    private int maxRoomCount = 3;

    // 外部调用此方法生成新房间(比如房间的门点击事件调用)
    public void SpawnNewRoom()
    {
        // 生成新房间克隆体(可根据需求调整生成位置)
        GameObject newRoom = Instantiate(roomPrefab, transform.position + Vector3.forward * 10, Quaternion.identity);
        // 将新房间加入队列
        roomQueue.Enqueue(newRoom);

        // 如果队列长度超过最大值,删除最早生成的房间
        if(roomQueue.Count > maxRoomCount)
        {
            GameObject oldestRoom = roomQueue.Dequeue();
            Destroy(oldestRoom);
        }
    }
}

修改后的房间脚本(仅处理开门触发)

using UnityEngine;

public class RoomDoor : MonoBehaviour
{
    // 拖拽场景中的GameManager对象到这里
    public RoomManager roomManager;

    // 开门时触发的方法(比如按钮点击、碰撞检测触发)
    public void OnDoorOpen()
    {
        // 调用管理器生成新房间
        roomManager.SpawnNewRoom();
    }
}

注意事项

  • 确保RoomManager挂在场景中不会被销毁的对象上(比如GameManager),避免队列丢失。
  • 调整SpawnNewRoom中的生成位置逻辑,匹配你的游戏房间布局需求(比如根据门的方向生成)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:30:55