2017-03-10 91 views
3

如果我有一個:請問gameObject.Destroy()在List中移除一個referanced gameObject嗎?

List<GameObject> brickList; 

每次我實例化磚(這是一個prefabed遊戲對象),我將它放入名單的實例時間:

brickList.add(Instantiate(brick, transform, Quaternion.identity)); 

如果我摧毀列表中的一磚一GameObject.Destroy()

private void OnTriggerEnter2D(Collider2D collision){ 
    if (collision.gameObject.CompareTag("Brick")){ 
     Destroy(collision.gameObject); 
    } 
} 

會不會使在brickList點的參考null並將渲染系統中被毀壞的磚塊拿出來?

+3

不,您需要將其從列表中刪除。 –

回答

5

該磚塊將不再呈現。遊戲對象和遊戲對象上的組件將處於「被破壞」狀態。如果您將遊戲對象與nullbrickList[0] == null)進行比較,則由於運算符超載,它將返回true - 即使該對象不是確實是null。如果組件被銷燬,大多數在Unity組件上調用的屬性和方法都會給你一個異常。 如果您希望列表中的參考消失,您必須自己將其刪除。

+0

大覆蓋! TIL,+1!有沒有一種方法可以在摧毀它之後摧毀一件物品,如果它仍然存在並且不是真正的零但是處於被摧毀的狀態? – Maakep

+0

基本上,操作符重載告訴你「Unity從現在開始不知道這個對象的存在」。所以沒有真正的方法來破壞它。 – Bart

1
private void OnTriggerEnter2D(Collider2D collision){ 
    if (collision.gameObject.CompareTag("Brick")){ 
     Destroy(collision.gameObject); 
     if (brickList.Containt(collision.gameObject)) { 
      brickList.Remove(collision.gameObject); 
     } 
    } 
} 

Yay刪除它,因爲它將在列表中爲空。

相關問題