2016-12-04 4 views
0

プログラムで作成したテキストオブジェクトを、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:私はCreateNewPlayerTextメソッドの最後にこれを追加する必要がありました。 –

+0

はい、これは動作させるために試したときに試した1つのことでした – mkkekkonen

答えて

0

私は、リストにテキストゲームオブジェクトを追加したことはありません。

players.Add(newObj); 
関連する問題