我创建了一个脚本,从位置产生 LIST 的无限移动对象。我想删除碰撞的对象,例如border.I试图删除它们将脚本销毁到对象,但控制台输出是......"已被销毁,但您仍在尝试访问它"或者"使用DestroyImmediate"。如何销毁它们?有什么建议吗?
产卵代码:
public List<GameObject> respawn = new List<GameObject> ();
public Vector3[] positions=new Vector3[5];
public GameObject barrier;
public BarrierMoving barrierMoving;
public bool isMoving=true;
public int lastRandom = 0;
float speed=60f;
void Start ()
{
barrierMoving = GameObject.FindObjectOfType<BarrierMoving> ();
InvokeRepeating ("SpawnBarrier",1f,speed*Time.deltaTime);
}
public void Update ()
{
if(isMoving)
{
foreach(GameObject stop in respawn)
{
stop.transform.Translate (0f,0f,-0.4f);
}
}
}
// Spawning Function
void SpawnBarrier()
{
for(int i=0;i<=5;i++)
{
respawn.Add (Instantiate (barrier, positions [i], Quaternion.identity)as GameObject);
}
}
销毁剧本:
RespawnBarriers respawnBarriers;
void Start ()
{
respawnBarriers = GameObject.FindObjectOfType<RespawnBarriers> ();
}
void OnTriggerEnter(Collider other)
{
if(other.gameObject.CompareTag("Destroy"))
{
Destroy (respawnBarriers.barrier);
}
}
答案 0 :(得分:1)
您可以在产卵代码的更新方法中引用您的列表。 在销毁脚本中销毁对象时,重新生成列表中的对象的引用将丢失并生成错误。
您应该在销毁对象之前从重新生成列表中删除引用。 如果您只有一个实例,我建议您对spawn脚本进行静态引用以便于访问。