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

Unity 2D贪吃蛇游戏:食物对象销毁函数失效问题求助

问题原因与解决方法

核心问题

你在SpawnFood方法里声明了局部变量foodGameObject,这会遮蔽类级别的同名成员变量。导致SnakeMoved中调用Object.Destroy(foodGameObject)时,实际操作的是未被正确赋值的类成员变量(大概率是null),而非你生成的食物对象。

修复步骤

  1. 确保foodGameObject是类的成员变量(在所有方法外声明):
// 在类的顶部添加成员变量声明
private GameObject foodGameObject;
  1. 修改SpawnFood方法,去掉局部变量的GameObject声明,直接给成员变量赋值:
private void SpawnFood() 
{
    foodGridPosition = new Vector2Int(Random.Range(0, width), Random.Range(0, height));
    
    // 去掉前面的GameObject,直接赋值给成员变量
    foodGameObject = new GameObject("Food", typeof(SpriteRenderer));
    foodGameObject.GetComponent<SpriteRenderer>().sprite = GameAssets.i.foodSprite;
    foodGameObject.transform.position = new Vector3(foodGridPosition.x, foodGridPosition.y);
}
  1. 可选优化:添加null判断避免潜在空引用
public void SnakeMoved(Vector2Int snakeGridPosition)
{
    if (snakeGridPosition == foodGridPosition)
    {
        if(foodGameObject != null)
        {
            Object.Destroy(foodGameObject);
        }
        SpawnFood();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:10:28