2016-12-04 263 views
0

我有一些編程創建的Text對象,我想在更新它們的XML列表後刪除它們。出於某種原因,它們不會被刪除。他們仍然在等級中顯示。Unity GameObjects在它們被銷燬後仍然顯示在層次結構中

XML只是一個帶有根元素和具有名稱屬性的播放器元素的文件。

下面的代碼:

public GameObject textTemplate; 
public InputField nameInput; 

// list of player names 
private List<GameObject> players = new List<GameObject>(); 

private const string playersPath = "foo/bar.xml"; 

// this is a button OnClick callback 
public void TryAddNew() 
{ 
    // get name from input field 
    string name = nameInput.text; 

    if (players.FirstOrDefault(t => t.GetComponent<Text>().text == name) == null) 
    { 
     // update XML 

     XDocument doc = XDocument.Load(playersPath); 

     XElement root = doc.Element("players"); 
     root.Add(new XElement("player", 
      new XAttribute("name", name) 
     )); 

     doc.Save(playersPath); 

     LoadPlayers(); 
    } 
} 

private void LoadPlayers() 
{ 
    // destroy existing player texts 
    foreach (GameObject obj in players) 
    { 
     // THE PROBLEM IS HERE, this doesn't seem to work 
     UnityEngine.Object.Destroy(obj.GetComponent<Text>()); 
     UnityEngine.Object.Destroy(obj); 
    } 
    players.Clear(); 

    // load players from XML 

    XDocument users = XDocument.Load(playersPath); 

    XElement root = users.Element("players"); 

    int i = 0; 

    foreach (XElement playerEle in root.Elements("player")) 
    { 
     CreateNewPlayerText(playerEle.Attribute("name").Value, i); 
     i++; 
    } 
} 

// instantiate new player text 
private void CreateNewPlayerText(string name, int index) 
{ 
    GameObject newObj = Instantiate(textTemplate) as GameObject; 

    // insert into parent view 
    newObj.transform.SetParent(textTemplate.transform.parent); 

    Text newText = newObj.GetComponent<Text>(); 
    newText.text = name; 
    newText.rectTransform.anchoredPosition = new Vector2(SCROLL_MARGIN, -SCROLL_MARGIN - index * 15); 

    // show text 
    newObj.SetActive(true); 
} 
+2

你並不需要摧毀這兩個組件和遊戲客體,破壞了遊戲對象destroyes重視它太多的所有組件。 –

+0

是的,這只是我試圖讓這個工作起作用的一件事 – mkkekkonen

回答

0

我從來沒有添加的文本GameObjects到列表中。我不得不把它添加到CreateNewPlayerText方法的末尾:

players.Add(newObj); 
相關問題