2017-07-08 3 views
0

je le code suivant dans Unity3D pour l'ajout et la suppression d'un segment de ligne pour un dessin 3D: est un MonoBehavior j'ai définidétruit pas détruire 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. Toutefois, cet appel de destruction ne détruit pas réellement l'objet LineSegment. Le seul comportement discernable que je peux trouver est qu'il remet l'ancienne transformation géométrique de LineSegment en identité.

Qu'est-ce qui me manque?

Répondre

4

Cependant, cette destruction ne détruit pas l'appel fait l'objet LineSegment

Lorsque vous appelez Destroy(componentName);, le composant qui est passée sera détruite, mais le gameobject le composant est fixé à pas être détruit.

Si vous voulez que le GameObject détruise avec tous les scripts attachés, alors Destroy(componentName.gameObject); doit être utilisé. Remplacez Destroy(lineSegmentRep[i]); avec Destroy(lineSegmentRep[i].gameObject);.

Avant de détruire chaque LineSegment, il est également important de les supprimer de la liste afin de ne pas avoir un LineSegment vide/nul dans cette liste lineSegmentRep.

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

Merci beaucoup d'avoir signalé cela! C'était à l'origine censé être une liste des gameObjects, pas une liste des MonoBehavior, je ne sais pas pourquoi j'ai fait ça. Merci! – user650261

1

il détruit le composant de type LineSegment.

Vous devez dire de détruire l'objet de jeu.

Destroy(lineSegmentRep[i].gameObject);