从列表中删除或删除产卵对象

时间:2018-04-12 17:27:27

标签: c# unity3d

我创建了一个脚本,从位置产生 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);
    }
}

1 个答案:

答案 0 :(得分:1)

您可以在产卵代码的更新方法中引用您的列表。 在销毁脚本中销毁对象时,重新生成列表中的对象的引用将丢失并生成错误。

您应该在销毁对象之前从重新生成列表中删除引用。 如果您只有一个实例,我建议您对spawn脚本进行静态引用以便于访问。