2015-05-29 129 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