销毁不销毁GameObject
Destroy not destroying GameObject
我在 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。
但是,此销毁调用实际上并未销毁 LineSegment 对象。我能找到的唯一可辨别的行为是它将旧的 LineSegment 的几何变换设置回身份。
我错过了什么?
它正在破坏 LineSegment 类型的组件。
您需要告知才能销毁游戏对象。
Destroy(lineSegmentRep[i].gameObject);
However, this destroy call isn't actually destroying the LineSegment
object
当你调用Destroy(componentName);
时,传入的组件将被销毁,但组件所附加的GameObject将不会被销毁。
如果您希望 GameObject 随附的所有脚本一起销毁,则应使用 Destroy(componentName.gameObject);
。
因此将 Destroy(lineSegmentRep[i]);
替换为 Destroy(lineSegmentRep[i].gameObject);
。
此外,在销毁每个 LineSegment 之前,重要的是您还要将它们从列表中删除,这样您就不会在那个 lineSegmentRep
列表中有一个 empty/null LineSegment。
public void deleteSegment(int i)
{
//Remove from the List
lineSegmentRep.Remove(lineSegmentRep[i]);
//Now, destroy its object+script
Destroy(lineSegmentRep[i].gameObject);
}
我在 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。
但是,此销毁调用实际上并未销毁 LineSegment 对象。我能找到的唯一可辨别的行为是它将旧的 LineSegment 的几何变换设置回身份。
我错过了什么?
它正在破坏 LineSegment 类型的组件。
您需要告知才能销毁游戏对象。
Destroy(lineSegmentRep[i].gameObject);
However, this destroy call isn't actually destroying the LineSegment object
当你调用Destroy(componentName);
时,传入的组件将被销毁,但组件所附加的GameObject将不会被销毁。
如果您希望 GameObject 随附的所有脚本一起销毁,则应使用 Destroy(componentName.gameObject);
。
因此将 Destroy(lineSegmentRep[i]);
替换为 Destroy(lineSegmentRep[i].gameObject);
。
此外,在销毁每个 LineSegment 之前,重要的是您还要将它们从列表中删除,这样您就不会在那个 lineSegmentRep
列表中有一个 empty/null LineSegment。
public void deleteSegment(int i)
{
//Remove from the List
lineSegmentRep.Remove(lineSegmentRep[i]);
//Now, destroy its object+script
Destroy(lineSegmentRep[i].gameObject);
}