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

Unity技术问题:如何在不同函数中销毁实例化对象

问题解决:销毁生成对象后立即生成新对象

你的代码存在三个核心问题:

  • Destroy(this.gameObject)销毁的是挂载该脚本的游戏对象,而非你生成的食物实例
  • 未保存生成的食物引用,导致无法在其他函数中定位到要销毁的目标
  • 销毁后未触发新的生成逻辑

以下是修正后的完整代码:

public GameObject[] food;
public Vector3Int spawnPosition;
// 新增变量存储当前生成的食物实例
private GameObject currentFood;

public void Start()
{
    SpawnFood();
}

// 生成食物
public void SpawnFood()
{
    int random = Random.Range(0, food.Length);
    // 将实例化的食物引用存入全局变量
    currentFood = Instantiate(food[random], spawnPosition, Quaternion.identity);
}

private void Update()
{
    if(Input.GetKeyDown(KeyCode.C))
    {
        // 先检查食物实例是否存在,避免空引用错误
        if(currentFood != null)
        {
            Destroy(currentFood);
            // 销毁后立即生成新食物
            SpawnFood();
        }
    }
}

关键修改说明

  1. 添加private GameObject currentFood;全局变量,保存每次生成的食物实例,让其他函数能直接访问到要销毁的对象
  2. 在SpawnFood中把实例化结果赋值给currentFood,建立引用关联
  3. 销毁前先判断currentFood不为空,避免空引用报错,销毁完成后直接调用SpawnFood()生成新实例

如果需要等待旧对象完全销毁后再生成新对象(避免帧内重叠),可以改用带回调的销毁方式:

Destroy(currentFood, () => {
    SpawnFood();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:25:22