问题描述
当克隆的预制件到达立方体 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() 似乎应用于最后一个克隆的恒星,我如何将其应用于任何克隆的恒星?
解决方法
您正在销毁 star
但您仍在检查他在 Update() 中的位置
您可以通过更改 if 来轻松解决此问题
`if(star!= null)`
{
if(star.transform.position.x<bmin.x)
{
Destroy(star)
}}
所以如果star被销毁了,就不再检查了