我在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的几何变换设置回身份。
我错过了什么?
答案 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);