销毁不破坏GameObject

use*_*261 2 c# unity-game-engine 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]);
}
Run Code Online (Sandbox Code Playgroud)

LineSegment是我定义的MonoBehavior.

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

我错过了什么?

Pro*_*mer 6

但是,此destroy调用实际上并未破坏LineSegment对象

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

如果你想让GameObject与附加到它的所有脚本一起销毁,那么Destroy(componentName.gameObject);应该使用它.

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

在销毁每个LineSegment之前,还必须从List中删除它们,以便在该lineSegmentRepList中不会有空/ null LineSegment .

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


Eve*_*rts 5

它正在破坏 LineSegment 类型的组件。

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

Destroy(lineSegmentRep[i].gameObject);
Run Code Online (Sandbox Code Playgroud)