У меня есть некоторые программно созданные объекты 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);
}
Вам не нужно уничтожить как компонент и игры Objet, разрушая объект игры destroyes все компоненты, подключенные к нему тоже. –
Да, это была одна вещь, которую я пробовал, пытаясь заставить ее работать – mkkekkonen