销毁一个未激活的对象

本文关键字:激活 对象 一个 | 更新日期: 2023-09-27 17:51:06

我想简单地破坏一个Quad预制(hp bar)的停用实例,我能够破坏激活的:

private GameObject correspondingHpBar; 
private string correspondingHpBarName;
void Start() 
{ 
    correspondingHpBarName = "hpBar1" 
}
void Update()
{
    correspondingHpBar = GameObject.Find (correspondingHpBarName); 
    if (shipHp <= 0)
    {
        Destroy (correspondingHpBar); 
        Destroy (gameObject); 
    }
}

这对未激活的对象不起作用,我谷歌了一下,但没有找到答案。

销毁一个未激活的对象

未激活的对象不会调用它们的StartUpdate方法(也不会调用任何协程)。事实上,当一个对象被停用时,就像它自己的时间被冻结了。

你可以做的是创建一个方法来执行销毁,并找到一种从另一个脚本调用它的方法(例如,一种保持引用场景中所有HP条的控制器)。

下面是一些伪代码(没有检查它是否编译,但你应该适应它):

// in script for HP bar
public Boolean TryDestroy()
{
    if (shipHp <= 0)
    {
        Destroy (correspondingHpBar); 
        Destroy (gameObject); 
        return true;
    }
    return false;
}
// in another script
private List<HPBar> _allHPBars;
void Awake()
{
    _allHPBars = new List<HPBar>(FindObjectsOfType(typeof(HPBar)));
}
void Update()
{
    var destroyedHPBars = new List<HPBar>();
    foreach (var hpBar in _allHPBars)
    {
        if (hpBar.TryDestroy())
        {
            destroyedHPBars .Add(hpBar);
        }
    }
    foreach (var destroyedBar in destroyedHPBars)
    {
        _allHPBars.Remove(destroyedBar);
    }
}