删除GameObject的最后一个子节点的简单方法

问题描述 投票:2回答:2

我正在尝试编写一个简单的脚本来获取GameObject的子计数,然后销毁最后一个子节点(我希望它基本上像删除键一样)但我收到错误:Can't remove RectTransform because Image (Script) depends on it。有人能告诉我如何解决这个问题吗?

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class DeleteSymbol : MonoBehaviour, IPointerClickHandler
{
    public GameObject deleteButton;
    public GameObject encodePanel;
    public GameObject decodePanel;

    #region IPointerClickHandler implementation

    public void OnPointerClick (PointerEventData eventData)
    {
        int numChildren = encodePanel.transform.childCount;             // get child count
        Debug.Log("There are " + numChildren + " children");

        if (numChildren > 0)
        {
            Destroy(encodePanel.transform.GetChild(numChildren - 1));       // destroy last child
        }
    }
    #endregion
}
c# unity3d parent-child destroy
2个回答
3
投票

解决了这个问题:

Destroy(encodePanel.transform.GetChild(numChildren - 1).gameObject);


1
投票

答案是你需要销毁游戏对象本身,但你的代码试图试图破坏转换。转换(和其他组件)可能具有不允许单独销毁它们的依赖关系。不幸的是,Unity提供了相同的方法来销毁组件和游戏对象本身,如果选错了,则会提供无用的错误消息。

所以答案是:

Destroy(encodePanel.transform.GetChild(numChildren - 1).gameObject);

是正确的,这就是原因。

© www.soinside.com 2019 - 2024. All rights reserved.