销毁不破坏GameObject

时间:2017-07-08 19:45:39

标签: c# unity3d destroy

我在Unity3D中有以下代码,用于添加和删除3D绘图的线段:

public class LinearPiecewiseTrajectory : MonoBehaviuor
{
    private List<LineSegment> lineSegmentRep;

    //other stuff here

    public void addSegment()
    {
        GameObject lineSegmentObject = new GameObject();
        lineSegmentObject.name = "LineSegment";

        LineSegment lineSegment = lineSegmentObject.AddComponent<LineSegment>();

        lineSegmentObject.transform.parent = this.transform;
        lineSegmentRep.Add(lineSegment);
    }
}

public void deleteSegment(int i)
{
    Destroy(lineSegmentRep[i]);
}

LineSegment是我定义的MonoBehavior。

但是,这个destroy调用实际上并没有破坏LineSegment对象。我能找到的唯一可辨别的行为是它将旧的LineSegment的几何变换设置回身份。

我错过了什么?

2 个答案:

答案 0 :(得分:5)

  

然而,这个破坏调用实际上并没有破坏LineSegment   对象

当您调用Destroy(componentName);时,传入的组件将被销毁,但组件附加到的GameObject将被销毁。

如果你想让GameObject破坏附加的所有脚本,那么应该使用Destroy(componentName.gameObject);

所以用Destroy(lineSegmentRep[i]);替换Destroy(lineSegmentRep[i].gameObject);

同样在销毁每个LineSegment之前,您还要从列表中删除它们,这样您就不会在lineSegmentRep列表中找到空/空LineSegment。

public void deleteSegment(int i)
{
    //Remove from the List
    lineSegmentRep.Remove(lineSegmentRep[i]);
    //Now, destroy its object+script
    Destroy(lineSegmentRep[i].gameObject);
}

答案 1 :(得分:1)

它正在销毁LineSegment类型的组件。

你需要告诉要销毁游戏对象。

Destroy(lineSegmentRep[i].gameObject);
相关问题