不要销毁游戏对象

8

我在Unity3D中有以下代码,用于添加和删除三维图形的线段:

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。

然而,这个销毁调用实际上并没有销毁LineSegment对象。我能找到的唯一可辨别的行为是,它将旧的LineSegment的几何变换设置回标识。

我错过了什么?

2个回答

14

然而,这个destroy调用实际上并没有销毁LineSegment对象。

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

如果你想要销毁GameObject以及所有附加在它上面的脚本,应该使用Destroy(componentName.gameObject);

因此,请将Destroy(lineSegmentRep[i]);替换为Destroy(lineSegmentRep[i].gameObject);

另外,在销毁每个LineSegment之前,重要的是还要从List中将它们移除,这样就不会在lineSegmentRep List中留下空的/空值的LineSegment。

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

2
非常感谢您指出这一点!原本应该是游戏对象的列表,而不是MonoBehavior的列表,我不知道为什么会这样。谢谢! - user650261

5

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

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

Destroy(lineSegmentRep[i].gameObject);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接