2015-05-29 131 views
-5

我想简单地摧毁一个四预制(HP巴)的停用情况下,我能够摧毁那些激活使用:销毁停用对象

private GameObject correspondingHpBar; 
private string correspondingHpBarName; 

void Start() 
{ 
    correspondingHpBarName = "hpBar1" 
} 

void Update() 
{ 
    correspondingHpBar = GameObject.Find (correspondingHpBarName); 
    if (shipHp <= 0) 
    { 
     Destroy (correspondingHpBar); 
     Destroy (gameObject); 
    } 
} 

这不会停用对象的工作,我努力Google搜索但未能找到答案。

+3

如果您使用Unity游戏引擎请加标签[标签:unity3d ](即使是2D游戏),如果您不使用Unity,请为您使用的任何引擎找到标签。另外“它不工作”是不够的信息,[编辑你的问题](http://stackoverflow.com/posts/30537521/edit)并解释它如何不起作用。你有例外吗?它不是以预期的方式行事吗? –

回答

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); 
    } 
} 
+0

谢谢你,这是有帮助的。 – Huskarnov