在边界距离达到统一后销毁克隆的预制件

时间:2020-12-25 18:32:39

标签: unity3d instantiation destroy bounds collider

当克隆的预制件到达立方体 x 轴的边界时,我试图摧毁它们。但是当第一个克隆被销毁时,会出现错误,下一个出现的克隆不会销毁。

错误:

<块引用>

MissingReferenceException:“GameObject”类型的对象已被销毁,但您仍在尝试访问它。 您的脚本应该检查它是否为空,或者您不应该销毁该对象。 deploy.Update ()(在 Assets/deploy.cs:52)

这是附加到多维数据集的脚本:

public class deploy : MonoBehaviour
{
    public GameObject starsPrefab;    
    private GameObject star;
    public float respawnTime=40.0f;

    Vector3 bsize,bmax,bmin,plane;
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(starsWave());
        Collider bCollider = this.GetComponent<Collider>();

        bsize=bCollider.bounds.size;
        bmax=bCollider.bounds.max;
        bmin=bCollider.bounds.min;

        //Vector3 plane=new Vector3(bmax.x-bmin.x,bmax.y-bmin.y,bmax.z-bmin.z);
    }

    private void spawnStar()
    {
        star =Instantiate(starsPrefab) as GameObject;
        star.transform.position= new Vector2(bsize.x,Random.Range(-bsize.y,bsize.y));
    }
   
    IEnumerator starsWave()
    {
        while (true)
        {
            spawnStar();

            yield return new WaitForSeconds(respawnTime);
        }
    }

    void Update()
    {
        if(star.transform.position.x<bmin.x)
        {
            Destroy(star);
        }
    }

如果我增加respawnTime,也会出现同样的错误;第一个克隆出现,到达边界,它被破坏,有同样的错误,之后出现第二个克隆,到达边界,它被破坏,有同样的错误,&hellip

Destroy() 似乎应用于最后一个克隆的恒星,我如何将其应用于任何克隆的恒星?

1 个答案:

答案 0 :(得分:-1)

您正在销毁 star 但您仍在检查他在 Update() 中的位置

您可以通过更改 if 来轻松解决此问题

 `if(star!= null)`
{
if(star.transform.position.x<bmin.x)
{
Destroy(star)
}}

所以如果star被销毁了,就不再检查了