销毁一个未激活的对象
本文关键字:激活 对象 一个 | 更新日期: 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);
}
}
这对未激活的对象不起作用,我谷歌了一下,但没有找到答案。
未激活的对象不会调用它们的Start
或Update
方法(也不会调用任何协程)。事实上,当一个对象被停用时,就像它自己的时间被冻结了。
你可以做的是创建一个方法来执行销毁,并找到一种从另一个脚本调用它的方法(例如,一种保持引用场景中所有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);
}
}