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);
}
你并不需要摧毁这两个组件和游戏客体,破坏了游戏对象destroyes重视它太多的所有组件。 –
是的,这只是我试图让这个工作起作用的一件事 – mkkekkonen