【问题标题】:Wrong sprite is destroyed in Unity (DontDestroyOnLoad)错误的精灵在 Unity 中被销毁 (DontDestroyOnLoad)
【发布时间】:2016-05-18 10:07:56
【问题描述】:

我在更改SpriteRenderer 的图像时遇到问题,因为调用了 onClick 方法。

但是,我在重新加载场景后遇到了重复场景的问题(即退出场景然后再次返回)。

我尝试通过在重新进入场景时破坏正确的副本来解决此问题。但是,旧的(更改的)精灵(我想保留的)在新的精灵仍然存在时不断被破坏。

这是我保存和销毁精灵的代码的一部分:

private void saveSprite(Clue c){
        markedObjects.Add(c);
        Debug.Log ("Save");
        DontDestroyOnLoad (c.getSprite());
        create = true;
}

private void destroySprite(Clue c){
    foreach(Clue g in markedObjects){
        print (g);
        if (!markedObjects.Contains(c)){
            Debug.Log("Destroy");
            Destroy (c.getSprite());
        }
    }
}

我真的不明白destroySprite 条件!markedObjects.Contains(c) 是如何在仍然破坏不正确的精灵的同时传递的。

任何帮助将不胜感激。

【问题讨论】:

  • 您能否提供更多信息,例如: print(g); 是什么?线返回。您在此列表中拥有您期望的所有对象吗?什么时候调用这两个函数?
  • 什么是Clue?没有人知道这是什么。您的代码不足以获得帮助。
  • markedObjects 是否声明为静态?什么时候调用destroySprite?对于您的第二个问题:要在迭代时安全删除,请尝试访问 for 循环中的元素,该循环从最后一个元素到第一个元素。因此,您不会遇到迭代器问题,并且可以安全地删除项目而不必担心索引错误。

标签: c# object unity3d singleton monodevelop


【解决方案1】:

private void destroySprite(Clue c){

foreach(Clue g in markedObjects){ <-- get each Clue in markedObjects
    print (g);
    if (!markedObjects.Contains(c)){ <-- if c is not within all of markedObjects then destroy c? Perhaps you meant to destroy g.
        Debug.Log("Destroy");
        Destroy (c.getSprite()); 
    }
}

}

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2016-05-10
    • 2017-11-13
    • 2014-12-14
    相关资源
    最近更新 更多