父子关系

public class Lesson9 : MonoBehaviour
{
    public Transform son;
    // Start is called before the first frame update
    void Start()
    {
        #region 获取和设置父对象
        //获取父对象
        print(transform.parent.name);
        //取消父子关系
        transform.parent = null;
        //设置父对象
        transform.parent = GameObject.Find("robot").transform;
        //利用API来设置父子关系
        transform.parent.SetParent(null);
        transform.parent.SetParent(GameObject.Find("robot").transform);
        //参数一 父对象transform信息
        //参数二 是否保留世界坐标位置角度缩放信息
        //true=>会经过计算来保存自己原来的世界坐标位置角度缩放信息再应用到本地坐标系
        //false=>不会计算,直接把世界坐标系下的位置角度缩放信息赋值到本地坐标系里
        transform.parent.SetParent(GameObject.Find("robot").transform,true);
        #endregion

        #region 父对象解除父子关系
        //只影响自己第一层子对象(不影响子对象的子对象)
        transform.DetachChildren();
        #endregion

        #region 获取子对象
        //按名字查找子对象,能够找到失活对象,但是GameObject相关的Find无法找到失活对象
        //只能查找子对象,查找不到子对象的子对象
        print(transform.Find("Cube").name);

        //遍历子对象
        //获取子对象数量,失活子对象也计数且不会包括子对象的子对象
        print(transform.childCount);
        //通过索引号得到对应的子对象
        transform.GetChild(0);
        //遍历子对象
        for (int i = 0; i < transform.childCount; i++)
        {
            print(transform.GetChild(i).name);
        }
        #endregion

        #region 子对象的方法
        //判断是否为父对象
        //son对象的父对象是否为本身=>son.IsChildOf(transform);
        if (son.IsChildOf(transform))
        {
            print("该对象为自身子对象");
        }

        //得到自己作为子对象的编号
        print(son.GetSiblingIndex());
        //把自己设置为第一个子对象
        son.SetAsFirstSibling();
        //把自己设置成为最后一个子对象
        son.SetAsLastSibling();
        //把自己设置为指定编号子对象
        //如果填的参数溢出了(负数或者超出容量的数),会直接变成最后一个子对象
        son.SetSiblingIndex(2);
        #endregion
    }

}
posted @ 2025-03-16 10:40  cannedmint  阅读(40)  评论(0)    收藏  举报