2016-12-04 266 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); 
相关问题