【问题标题】:Destroy cloned prefabs after bounds distance reached unity在边界距离达到统一后销毁克隆的预制件
【发布时间】:2021-04-03 15:18:46
【问题描述】:

当克隆的预制件到达立方体 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() 应用于最后一个克隆星,我如何将它应用于任何克隆星?

【问题讨论】:

  • 你可能会生成许多星星,但只记得最后生成的星星。
  • 有没有办法记住所有的星星?
  • @lemmecatch 使用 List&lt;GameObject&gt; 而不是单个引用?
  • @derHugo 谢谢你的建议我要试试,我是编码和统一的新手,所以我不知道在哪里寻找
  • “已解决”和“已更新”之类的词不能放在 Stack Overflow 问题标题中。修订历史记录表明帖子何时“更新”,如果问题已得到回答,则应接受发布在问题下方最能解决该问题的答案(单击复选标记按钮)。如果您自己解决了问题,请发布您自己的答案并接受它。不要在问题中发布解决方案;这让其他人很难找到和阅读它们。

标签: unity3d instantiation destroy bounds collider


【解决方案1】:

你正在摧毁star,但你仍在检查他在Update()中的位置

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

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

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

【讨论】:

  • 您好,感谢您的快速回复,我刚刚改了,但问题是一样的
  • 呃,这是因为您首先检查了星星,看看我编辑的答案:D @lemmecatch
  • 没有错误。我降低了星星在 x 轴上向负方向移动的速度(脚本以浮动速度附加到 starPrefabs),但没有一颗星星会破坏它们继续在 bmin.x 之外移动
  • 使用新代码可以正常工作,检查我的编辑@lemmecatch
  • 是的,我尝试使用新代码,但它一次只能工作一个,所以如果有超过 1 颗星可见,销毁不起作用(我在这里玩速度)如果有只有一次通过然后代码才能工作(它运行得很快,并且在第二颗星出现之前就破坏了)
猜你喜欢
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2021-08-18
相关资源
最近更新 更多