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