2017-07-08 4 views
0

Ich habe folgende Code in Unity3D zum Hinzufügen und ein Liniensegment für eine 3D Zeichnung löschen:Zerstören nicht zerstören Gameobject

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 ist ein MonoBehavior I definiert haben.

Dieser Destroy-Aufruf zerstört jedoch nicht das LineSegment-Objekt. Das einzige erkennbare Verhalten, das ich finden kann, ist, dass es die geometrische Transformation des alten Liniensegments auf Identität zurückführt.

Was fehlt mir?

Antwort

4

Doch dieser Ruf zerstören ist nicht wirklich das Objekt zu zerstören Linesegment

Wenn Sie Destroy(componentName); nennen, die Komponente, die zerstört werden in übergeben wird, aber die Gameobject das Bauteil angebracht zu werden nicht zerstört werden.

Wenn das GameObject mit allen daran angehängten Skripten zerstört werden soll, sollte Destroy(componentName.gameObject); verwendet werden.

Ersetzen Sie also Destroy(lineSegmentRep[i]); durch Destroy(lineSegmentRep[i].gameObject);.

Bevor Sie jedes LineSegment zerstören, ist es wichtig, dass Sie es auch aus der Liste entfernen, damit Sie kein leeres/null LineSegment in der Liste lineSegmentRep haben.

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

Vielen Dank für den Hinweis! Das sollte ursprünglich eine Liste der GameObjects sein, keine Liste des MonoBehavior, ich weiß jetzt nicht, warum ich das gemacht habe. Vielen Dank! – user650261

1

es zerstört die Komponente vom Typ LineSegment.

Sie müssen sagen, das Spielobjekt zu zerstören.

Destroy(lineSegmentRep[i].gameObject);