Unity 2D贪吃蛇游戏:食物对象销毁函数失效问题求助
问题原因与解决方法
核心问题
你在SpawnFood方法里声明了局部变量foodGameObject,这会遮蔽类级别的同名成员变量。导致SnakeMoved中调用Object.Destroy(foodGameObject)时,实际操作的是未被正确赋值的类成员变量(大概率是null),而非你生成的食物对象。
修复步骤
- 确保
foodGameObject是类的成员变量(在所有方法外声明):
// 在类的顶部添加成员变量声明 private GameObject foodGameObject;
- 修改
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); }
- 可选优化:添加null判断避免潜在空引用
public void SnakeMoved(Vector2Int snakeGridPosition) { if (snakeGridPosition == foodGridPosition) { if(foodGameObject != null) { Object.Destroy(foodGameObject); } SpawnFood(); } }
内容的提问来源于stack exchange,提问作者Swen Andermatt
相关产品推荐
相关产品推荐

