【问题标题】:C# function destroy dosen't functionC# 函数销毁 dosen\'t 函数
【发布时间】:2023-01-13 17:57:24
【问题描述】:

所以我正在尝试在 Unity 中制作一个 2D Snake 游戏,它是由 4 个不同的 C# 脚本制作的。

在这个特别的例子中,我尝试删除蛇吃的食物,但没有任何反应(它在代码中标记),其他功能工作正常。我什至没有收到错误。

如果您需要其他脚本,我也可以发送。

    public void SnakeMoved(Vector2Int snakeGridPosition)
    {
        if (snakeGridPosition == foodGridPosition)
        {
            Object.Destroy(foodGameObject);
            SpawnFood();
        }
    }

我试图查看 IF 子句中的其余部分是否有效,其余部分是否正常工作。我不知道我做错了什么。

foodGameObject 的代码:

    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);
}

【问题讨论】:

  • 究竟是什么不起作用 - 换句话说,为什么你认为游戏对象没有被破坏?
  • 游戏对象是蛇应该吃的“食物”,食物被吃掉后它应该从场地消失。但我仍然可以看到它。
  • 请通过添加启动 foodGameObject 的部分来完成问题。尽管这是一个很明显的猜测。
  • 这可能是 3,2 与 3,2.00000001 不同的位置的浮点问题,可能是新食物在旧食物产卵的地方产卵。这可能是很多事情
  • foodGameObject 是什么对象类型? GameObjectMonoBehaviour

标签: c# unity3d 2d


【解决方案1】:

您需要销毁游戏对象。 foodGameObject 可能只是像 GetComponent&lt;&gt;... 这样的东西检索到的组件。

在这种情况下,您需要调用:Object.Destroy(foodGameObject.gameObject); 来销毁整个东西,而不仅仅是删除组件。

【讨论】:

  • 感谢您的输入,但遗憾的是它不起作用。在我应用更改后,我得到了该行的空引用异常(对于 snakeGrid 位置)。你知道为什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2012-03-15
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
相关资源
最近更新 更多