销毁已停用的对象

时间:2015-05-29 19:21:25

标签: c# unity3d destroy

我想简单地销毁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); 
    }
}

这不适用于已停用的对象,我用Google搜索但未能找到答案。

1 个答案:

答案 0 :(得分:0)

停用的对象没有调用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);
    }
}