繁体   English   中英

从列表中删除或删除生成对象

[英]Remove or Delete spawning objects from the List

我制作了一个脚本,该脚本从位置产生带有LIST的无限移动对象。我想删除与边界碰撞的对象。我试图通过对对象应用destroy脚本来删除它们,但是控制台输出是...”已销毁,但您仍在尝试访问它”或“立即使用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);
    }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM